IOS 5 解析Json


作為一種輕量級的數據交換格式,json正在逐步取代xml,成為網絡數據的通用格式

從ios5開始,apple提供了對json的原生支持,但為了兼容以前的ios版本,我們仍然需要使用第三方庫來解析

常用的ios json庫有json-frameworkJSONKitTouchJSON等,這里說的是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,程序可能會報錯(我的測試結果:使用由網絡得到的php/json_encode生成的json時報錯,但使用NSString定義的json字符串時,解析成功),最好使用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

 

來源:http://www.jiangkunlun.com/2012/07/ios_json/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM