網絡請求之JSON解析


<一>JSON的基本知識

  1. 什么是JSON:JSON的全稱是JavaScript Object Notation(JavaScript對象符號),是目前使用最廣泛的數據交換格式,具有跨平台.跨語言的優勢,而且對照XML,JSON作為數據傳輸格式時,數據傳輸量更小,JSON數據格式既適合人來進行讀寫,又適合計算機本身解析和合成
  2. JSON的數據結構
    1.   由key-value對組成的數據結構,這種數據結構在不同的語言中有不同的實現,例如:在JavaScript中是一個對象,在Objective-C中是一種NSDictionary對象,在C語言中則是一個struct,在其他語言中可能對應其他的結構
    2.   有序集合,這種數據結構在不同的語言中可能有NSArray,vector,數組和序列等實現
  3. JSON網址:http://www.json.org

<二>JSON-OC數據類型對照表

JSON-OC數據對照表
JSON OC
大括號{} NSDictionary
中括號[] NSArray
雙引號"" NSString
數字 1, 2.3 NSNumber

 

 

 

 

 


 

<三>Objective-C中的JSON解析與生成:(JSON->Objective-C  Objectivew->JSON)

在iOS5之后,iOS SDK提供了NSJAONSerialization類來解析和生成JSON,但在有些時候為了兼容以前的版本或者尋求更強大的功能,我們會選擇第三方庫來處理JSON,常見的第三方庫有SBJson, JSONKit,  並有模型處理類庫例如:MJExtension,JSONModel,YYModel來幫助JSON解析

<四>使用NSJSONSerialization來處理JSON數據

NSJSONSerailization 提供了如下類方法來支持JSON解析和生成

  1.  + JSONObjectWithData: options: error:           該方法負責將制定的NSData中包含的JSON數據轉換為Obj-C對象

  2.  + JSONObjectWithStream: options: error:           該方法負責將制定的輸入流中包含的JSON數據轉換為Obj-C對象

  3.  + dataWithJSONObject: options: error:               該方法負責將制定的JSON對象轉換為NSData對象

  4.  + writeJSONObject: toStream: options: error:     該方法負責將制定的JSON對象轉換為JSON字符串輸出到制定的輸出流中

 

 options:

 

            NSJSONReadingMutableContainers = (1UL << 0), 所有節點可變

 

            NSJSONReadingMutableLeaves = (1UL << 1),葉子節點可變

 

            NSJSONReadingAllowFragments = (1UL << 2) 根節點可變

 

  1.  isValidJSONObject:                                         該方法用於判斷制定的對象是否可以轉換為JSON數據

由於NSJSONSerailization並不能把任意的對象轉換為JSON數據,所以提供了類方法 isValidJSONObject 用來判斷制定對象是否可以轉換為JSON數據

 

NSJSONSerailization只能講滿足如下條件的對象轉換為JSON對象

  • 頂層對象只能是NSArray或者NSDictionary
  • 集合中包含的對象只能是NSString,NSNumber,NSArray,NSDictionary或NSNull對象
  • 所有NSDictionary的key只能是NSString
  • NSNumber包裝的數值不能是NaN或Infinity

<五>使用JSONKit來處理JSON數據

JSONKit的github地址:

JSONKit 提供了如下類方法來支持JSON解析和生成

 

  1.  用於解析NSString類型的JSON數據的分類

@interface NSString (JSONKitDeserializing)

- (id)objectFromJSONString;

- (id)objectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags;

- (id)objectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error;

- (id)mutableObjectFromJSONString;

- (id)mutableObjectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags;

- (id)mutableObjectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error;

@end

2. 用於解析NSData類型的JSON數據的分類 

@interface NSData (JSONKitDeserializing)

// The NSData MUST be UTF8 encoded JSON.

- (id)objectFromJSONData;

- (id)objectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags;

- (id)objectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error;

- (id)mutableObjectFromJSONData;

- (id)mutableObjectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags;

- (id)mutableObjectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error;

@end

3. JSONKit 為NSDictionary,NSArray,NSString提供了將Obj-C對象轉換為JSON數據的方法

- (NSData *)JSONData;

- (NSString *)JSONString;

<六>使用SBJson來處理JSON數據

SBJson的github地址:

 


免責聲明!

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



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