将JSONKit.h和JSONKit.m拖到項目中
下載下傳位址:https://github.com/johnezang/JSONKit/
配置:
//導入JSONKit時候需要特别的配置 (-fno-objc-arc)
//(1)修改JSONKit.m檔案第680行,修改為object_setClass(array, _JKArrayClass);
//(2)修改JSONKit.m檔案第931行,修改為object_setClass(dictionary, _JKDictionaryClass);
下面代碼:
//string to dictionary
NSString *resultStr = @"{"name": "admin","list": ["one","two","three"]}";
NSData* jsonData = [resultStr dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *resultDict = [jsonData objectFromJSONData];
NSLog(@"name is :%@",[resultDict objectForKey:@"name"]);
NSArray *list = [resultDict objectForKey:@"list"];
for (NSString *str in list) {
NSLog(@"list res:%@",str);
}
//dicttionary to string
NSString *jsonStr = [resultDict JSONString];
NSLog(@"temp is :%@",jsonStr);
為了友善大家看懂在上面的代碼中做了相應更改。
//建立或者讀取json資料
NSString *resultStr = @"{"name": "admin","list": ["one","two","three"]}";
//編碼json資料
NSData* jsonData = [resultStr dataUsingEncoding:NSUTF8StringEncoding];
//開始解析json資料
NSDictionary *resultDict = [jsonData objectFromJSONData];
//讀取解析後的json資料放熬數組裡面
NSArray *arr = [resultDict objectForKey:@"name"];
NSArray *list = [resultDict objectForKey:@"list"];
NSLog(@"arr is :%@\n, list is :%@", arr,list);
//将解析後json資料再轉換為json進行輸出,
NSString *jsonStr = [resultDict JSONString];
NSLog(@"temp is :%@",jsonStr);
到這裡我們就為json解析中的jsonKit做了簡單的介紹,如果以後你還遇到需要解析json為妾是要用jsonKit的時候,基本上隻要把上面的代碼弄懂了,再在你項目裡面做小部分的相應更改就能很好的操作了!
下面是解析json的一個很好的執行個體
- (IBAction)btnPressJsonKit:(id)sender {
//如果json是“單層”的,即value都是字元串、數字,可以使用objectFromJSONString
NSString *json1 = @"{"a":123, "b":"abc"}";
NSLog(@"json1:%@",json1);
NSDictionary *data1 = [json1 objectFromJSONString];
NSLog(@"json1.a:%@",[data1 objectForKey:@"a"]);
NSLog(@"json1.b:%@",[data1 objectForKey:@"b"]);
[json1 release];
//如果json有嵌套,即value裡有array、object,如果再使用objectFromJSONString,程式可能會報錯(測試結果表明:使用由網絡或得到的php/json_encode生成的json時會報錯,但使用NSString定義的json字元串時,解析成功),最好使用objectFromJSONStringWithParseOptions:
NSString *json2 = @"{"a":123, "b":"abc", "c":[456, "hello"], "d":{"name":"張三", "age":"32"}}";
NSLog(@"json2:%@", json2);
NSDictionary *data2 = [json2 objectFromJSONStringWithParseOptions:JKParseOptionLooseUnicode];
NSLog(@"json2.c:%@", [data2 objectForKey:@"c"]);
NSLog(@"json2.d:%@", [data2 objectForKey:@"d"]);
[json2 release];
}