iOS - JSON 深談

作者:Mitchell 

一、JSON簡(jiǎn)介

  • JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式。它基于ECMAScript的一個(gè)子集。 JSON采用完全獨(dú)立于語(yǔ)言的文本格式,但是也使用了類似于C語(yǔ)言家族的習(xí)慣(包括C、C++、C#、Java、JavaScript、Perl、Python等)。這些特性使JSON成為理想的數(shù)據(jù)交換語(yǔ)言。 易于人閱讀和編寫,同時(shí)也易于機(jī)器解析和生成(網(wǎng)絡(luò)傳輸速率)。更多信息請(qǐng)參考度娘

二、iOS 中 JSON 轉(zhuǎn) OC 對(duì)象

  • 由于系統(tǒng)自帶的 NSJSONSerialization是效率最高的轉(zhuǎn)化方式,所以這里只介紹這種方式。
  • 代碼
NSURL *url = [NSURL URLWithString:@"urlAddress"];
    NSURLRequest*request = [NSURLRequest requestWithURL:url];
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
       /*
        第一個(gè)參數(shù):需要轉(zhuǎn)換的json數(shù)據(jù)
        第二個(gè)參數(shù):告訴系統(tǒng)如何轉(zhuǎn)換json數(shù)據(jù)(轉(zhuǎn)換出來(lái)的對(duì)象是否可變/子對(duì)象是否可變/是否是標(biāo)準(zhǔn)json)
        NSJSONReadingMutableContainers = 轉(zhuǎn)換出來(lái)的對(duì)象是可變數(shù)組或者可變字典
        NSJSONReadingMutableLeaves = 轉(zhuǎn)換呼出來(lái)的OC對(duì)象中的字符串是可變的\注意:iOS7之后無(wú)效 bug
        NSJSONReadingAllowFragments = 如果服務(wù)器返回的JSON數(shù)據(jù),不是標(biāo)準(zhǔn)的JSON,那么就必須使用這個(gè)值,否則無(wú)法解析
        第三個(gè)參數(shù):錯(cuò)誤信息
        */
        NSDictionary*dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
        NSLog(@"%@",dict);
    }];
  • 注意:什么是不標(biāo)準(zhǔn)的 JSON 呢?
    • 當(dāng)我們將字符串 json 的值分別設(shè)置為,10、10.1、true、false、null的時(shí)候,options 必須選擇 NSJSONReadingAllowFragments 這種類型,否則就會(huì)無(wú)法解析出其中的內(nèi)容。
    NSString *json = @"null";
    //NSString *json = @"10";
    //NSString *json = @"10.1;
    // 10 --> NSNumber
    // 10.1 --> NSNumber
    // true/false --> NSNumber
    // null --> NSNull(空對(duì)象)
    NSData *data = [json dataUsingEncoding:NSUTF8StringEncoding];
    id obj = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
    NSLog(@"%@", [obj class]);

三、OC 對(duì)象轉(zhuǎn) JSON

  • 代碼:
NSDictionary *dict = @{
                           @"name":@"Mitchell",
                           @"sex":@"man"
                           };
    /*
     第一個(gè)參數(shù): 需要轉(zhuǎn)換為JSON的對(duì)象
     第二個(gè)參數(shù): 轉(zhuǎn)換為JSON之后是否需要排版
     第三個(gè)參數(shù): 錯(cuò)誤信息
     */
    NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:nil];
    NSString *temp = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • JSON JSON和XML都是需要解析的 JSON是一種輕量級(jí)的數(shù)據(jù)格式,一般用于數(shù)據(jù)交互服務(wù)器返回給客戶端的數(shù)據(jù)...
    JonesCxy閱讀 2,008評(píng)論 2 10
  • 1.服務(wù)器返回的數(shù)據(jù): 對(duì)于服務(wù)器返回來(lái)的data,一般有兩種格式:JSON/XMLJSON:是民間的;XML:是...
    SoftKnife閱讀 622評(píng)論 0 5
  • 面向?qū)ο笕笾е庋b:就是把相關(guān)的數(shù)據(jù)和代碼結(jié)合成一個(gè)有機(jī)的整體,形成數(shù)據(jù)和操作代碼的封裝體,對(duì)外只提供一個(gè)可以控...
    WangDavid閱讀 1,967評(píng)論 0 2
  • JSON的簡(jiǎn)單介紹 1.什么是JSON(1)JSON是一種輕量級(jí)的數(shù)據(jù)格式,一般用于數(shù)據(jù)交互(2)服務(wù)器返回給客戶...
    Mario_ZJ閱讀 770評(píng)論 0 0
  • JSON解析 JSON簡(jiǎn)單介紹 JSON是一種輕量級(jí)的數(shù)據(jù)格式,一般用于數(shù)據(jù)交互。服務(wù)器返回給客戶端的數(shù)據(jù),一般都...
    擱淺的青蛙閱讀 1,886評(píng)論 0 4

友情鏈接更多精彩內(nèi)容