面试题答案
一键面试- 首先,创建自定义模型类,假设模型类名为
Person
:
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property (nonatomic, strong) NSString *name;
@property (nonatomic, assign) NSInteger age;
- (instancetype)initWithName:(NSString *)name age:(NSInteger)age;
@end
@implementation Person
- (instancetype)initWithName:(NSString *)name age:(NSInteger)age {
self = [super init];
if (self) {
_name = name;
_age = age;
}
return self;
}
@end
- 然后,解析JSON数组并存储到自定义模型对象数组中:
#import <Foundation/Foundation.h>
#import "Person.h"
NSArray<Person *> *parseJSONArray(NSData *jsonData) {
NSError *error;
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
if (error) {
NSLog(@"JSON解析错误: %@", error);
return nil;
}
NSMutableArray<Person *> *personArray = [NSMutableArray array];
for (NSDictionary *dict in jsonArray) {
NSString *name = dict[@"name"];
NSNumber *ageNumber = dict[@"age"];
if (!name || ![ageNumber isKindOfClass:[NSNumber class]]) {
continue;
}
NSInteger age = ageNumber.integerValue;
Person *person = [[Person alloc] initWithName:name age:age];
[personArray addObject:person];
}
return [personArray copy];
}
你可以这样调用这个函数:
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString *jsonString = @"{\"array\":[{\"name\":\"Alice\",\"age\":25},{\"name\":\"Bob\",\"age\":30}]}";
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSArray<Person *> *resultArray = parseJSONArray(jsonData);
for (Person *person in resultArray) {
NSLog(@"Name: %@, Age: %ld", person.name, (long)person.age);
}
}
return 0;
}