IOS 5 解析Json
作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式
从ios5开始,apple提供了对json的原生支持,但为了兼容以前的ios版本,我们仍然需要使用第三方库来解析
常用的ios json库有json-framework、JSONKit、TouchJSON等,这里说的是JSONKit
JSONKit的使用相当简单,从github.com下载下来,添加到ios项目中,让好在要使用json的地方“#import “JSONKit.h””,json相关的方法,就会自动添加到NSString、NSData下,
常用的方法,有下面几个:
- ( id )objectFromJSONString;
- ( id )objectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags;
- ( id )objectFromJSONData;
- ( id )objectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags;
|
如果json是“单层”的,即value都是字符串、数字,可以使用objectFromJSONString:
NSString *json = @ "{\"a\":123, \"b\":\"abc\"}" ;
NSDictionary *data = [json objectFromJSONString];
NSLog (@ "json.a:%@" , [data objectForKey:@ "a" ]);
NSLog (@ "json.b:%@" , [data objectForKey:@ "b" ]);
[json release];
|
如果json有嵌套,即value里有array、object,如果再使用objectFromJSONString,程序可能会报错,最好使用objectFromJSONStringWithParseOptions
NSString *json = @"{\"a\":123, \"b\":\"abc\", \"c\":[134, \"hello\"],
\
"d\":{\"name\":\"张三\",\"age\":23}}"
;
NSLog
(@
"json:%@"
, json);
NSDictionary *data = [json objectFromJSONStringWithParseOptions:JKParseOptionLooseUnicode];
NSLog (@ "json.c:%@" , [data objectForKey:@ "c" ]);
NSLog (@ "json.d:%@" , [[data objectForKey:@ "d" ]objectForKey:@ "name" ]);
[json release];
|
结果:
2012-07-09 18:48:07.255 Ate-Goods[17113:207] json.c:(
134,
hello
)
2012-07-09 18:48:07.256 Ate-Goods[17113:207] json.d:张三
从上面的写法可以看出,json与objece-c的数据对应关系如下:
Number -> NSNumber
String -> NSString
Array -> NSArray
Object -> NSDictionary
另外:
null -> NNSNull
true and false -> NNSNumber