概述
You use the NSJSONSerialization class to convert JSON to Foundation objects and convert Foundation objects to JSON.
官方文檔給出的解釋如上。在現(xiàn)在流行架構(gòu)中開發(fā)移動(dòng)端項(xiàng)目魔慷,這個(gè)類是基本上大家都會(huì)用到的蚪黑,所以有必須要仔細(xì)學(xué)習(xí)一下及舍。
一個(gè)對(duì)象要轉(zhuǎn)成JSON,必須滿足下列條件:
- 頂級(jí)對(duì)象是NSArray或者NSDictionary
- 所有的對(duì)象都必須是NSString, NSNumber, NSArray, NSDictionary或者NSNull類的實(shí)例
- 所有的字典Keys都是NSString的實(shí)例
- 所有的數(shù)字都不是NaN(Not a Number)或者無窮大
也可能還有其他的規(guī)則。調(diào)用
isValidJSONObject
或者嘗試轉(zhuǎn)換一下才是決定對(duì)象是否能被轉(zhuǎn)換為JSON的最終方法。
Foundation對(duì)象轉(zhuǎn)化為JSON
+ dataWithJSONObject:options:error:
這里是轉(zhuǎn)化為JSON,所以options是NSJSONWritingOptions
葡兑,里面只有一個(gè)Enum是NSJSONWritingPrettyPrinted
,意思是生成的JSON會(huì)以設(shè)計(jì)好的帶空格的格式展示赞草,比較可讀讹堤;不設(shè)置的話(一般就是0,也可以定義一個(gè)字面常量來表示)就是最緊湊的JSON寫法厨疙。
+ writeJSONObject:toStream:options:error:
與第一個(gè)方法類同洲守,只是直接將Foundation對(duì)象寫入流
+ isValidJSONObject:
用來判斷是否是合規(guī)的可以轉(zhuǎn)為JSON的Foundation對(duì)象
從JSON創(chuàng)建Foundation對(duì)象
+ JSONObjectWithData:options:error:
這里是讀取JSON,所以options是NSJSONReadingOptions
轰异,有三個(gè)Enum值:
-
NSJSONReadingMutableContainers
從JSON創(chuàng)建的arrays和dictionaries是mutable的 -
NSJSONReadingMutableLeaves
從JSON創(chuàng)建的對(duì)象表的葉子字符串是可變字符串 -
NSJSONReadingAllowFragments
解析器允許最頂級(jí)對(duì)象不是NSArray或者NSDictionary的實(shí)例
上面的Enum值都是用來規(guī)定讀取的對(duì)象的格式岖沛,以方便你后續(xù)操作想要修改結(jié)果(對(duì)于這做法的必要性表示不太理解,即便是返回immutable的搭独,仍然后續(xù)自己變成mutable婴削,為什么要在api中加參數(shù)來解決?)
+ JSONObjectWithStream:options:error:
與第一個(gè)方法類同牙肝,只是從流中直接創(chuàng)建Foundation對(duì)象