Objective-C解析 Json 字符串

5 阅读1分钟

Json字符串的顶层结构是{} 或 []两种情况,因此分别使用 NSDictionary 和 NSArray 两种类型解析接收,下面分这两种情况进行解析:

第一种:顶层是{}的情况的代码:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // 第一种情况:json 字符串的顶层是{}的情况
        NSString *jsonStr = @"{\"name\": \"YangKL\", \"age\": 12}";
        NSData *data = [jsonStr dataUsingEncoding:NSUTF8StringEncoding];
        NSError *error = nil;
        id jsonObj = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];
        if([jsonObj isKindOfClass:[NSDictionary class]]){
            NSDictionary *dict = (NSDictionary *)jsonObj;
            id name = [dict objectForKey:@"name"];
            if(name != nil){
                NSLog(@"Name = %@", name);
            }
            id age = [dict objectForKey:@"age"];
            if(age != nil){
                NSLog(@"Age = %@", age);
            }
            id sex = [dict objectForKey:@"sex"];
            if(sex != nil){
                NSLog(@"Sex = %@", sex);
            }else{
                NSLog(@"不存在 Sex 属性");
            }
        }
    }
    return 0;
}

第二种:顶层是[]的情况的代码:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // 第一种情况:json 字符串的顶层是{}的情况
        NSString *jsonStr = @"[{\"name\": \"YangKL\", \"age\": 12}, {\"name\": \"Sunny\", \"age\": 13}]";
        NSData *data = [jsonStr dataUsingEncoding:NSUTF8StringEncoding];
        NSError *error = nil;
        id jsonObj = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];
        if([jsonObj isKindOfClass:[NSArray class]]){
            NSArray *array = (NSArray *) jsonObj;
            for(int i=0; i<array.count; i++){
                id item = array[i];
                id sex = [item objectForKey:@"sex"];
                if(sex == nil){
                    NSLog(@"不包含 sex 属性");
                }
                NSLog(@"name = %@", item[@"name"]);
                NSLog(@"age = %@", item[@"age"]);
            }
        }
    }
    return 0;
}