什么是JSON数据:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。
简单JSON数据:可以用下面这样的 JSON 表示 "名称 / 值对" :{ "firstName": "Brett" }
复杂一点的JSON数据:{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" }
更复杂点的JSON数据:
{ "programmers": [{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },{ "firstName": "Jason", "lastName":"Hunter", "email": "bbbb" },{ "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }
],
"authors": [{ "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },{ "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },{ "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }
],
"musicians": [{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },{ "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }
] }
上面的JSON数据转化成iOS里面的字典后,显示的形式是这样的:
{
authors = (
{
firstName = Isaac;
genre = "science fiction";
lastName = Asimov;
},
{
firstName = Tad;
genre = fantasy;
lastName = Williams;
},
{
firstName = Frank;
genre = "christian fiction";
lastName = Peretti;
}
);
musicians = (
{
firstName = Eric;
instrument = guitar;
lastName = Clapton;
},
{
firstName = Sergei;
instrument = piano;
lastName = Rachmaninoff;
}
);
programmers = (
{
email = aaaa;
firstName = Brett;
lastName = McLaughlin;
},
{
email = bbbb;
firstName = Jason;
lastName = Hunter;
},
{
email = cccc;
firstName = Elliotte;
lastName = Harold;
}
);
}
大致来说,就是大括号和中括号组成的键值对,大括号=字典,中括号=数组。
iOS JSON数据的解析:
iOS中如果要使用JSON数据,必须先解析成OC的字典,然后一步一步拆分成自己想要的数据,在ios5中apple增加了解析JSON的api——NSJSONSerialization。网上已经有人做过测试,NSJSONSerialization在效率上完胜SBJSON、TouchJSON、YAJL、JSONKit、NextiveJson。
NSJSONSerialization提供了将JSON数据转换为Foundation对象(一般都是NSDictionary和NSArray)和Foundation对象转换为JSON数据(可以通过调用isValidJSONObject来判断Foundation对象是否可以转换为JSON数据)。
NSDictionary *dic_1 = [NSJSONSerialization JSONObjectWithData:[parseJason dataUsingEncoding:NSUTF8StringEncoding] options:kNilOptions error:nil];
这个苹果自带的类比较简单,就几个方法和属性,但是它还可以反转换,就是可以把字典里的形式的值转化成JSON数据的NSSting。
NSDictionary *song = [NSDictionary dictionaryWithObjectsAndKeys:@"i can fly",@"title",@"4012",@"length",@"Tom",@"Singer", nil];
if ([NSJSONSerialization isValidJSONObject:song])
{
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:song options:NSJSONWritingPrettyPrinted error:&error];
NSString *json =[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"json data:%@",json);
}
转化后的形式:
json data:{
"Singer" : "Tom",
"title" : "i can fly",
"length" : "4012"
}