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;
}