MST

星途 面试题库

面试题:Objective-C中如何解析JSON数组

假设你接收到一个包含多个字典的JSON数组,每个字典中有'name'(字符串类型)和'age'(数值类型)字段,用Objective-C代码实现解析该JSON数组,并将数据存储到自定义的模型对象数组中。
20.6万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试
  1. 首先,创建自定义模型类,假设模型类名为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
  1. 然后,解析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;
}