iOS 数据交互模式
- 主要有两种:json xml
一、Json
-
什么是JSON
- JSON是一种轻量级的数据格式,一般用于数据交互
- 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外)
-
JSON的格式很像OC中的字典和数组
- {"name" : "jack", "age" : 10}
- {"names" : ["jack", "rose", "jim"]}
- 标准JSON格式的注意点:key必须用双引号
要想从JSON中挖掘出具体数据,得对JSON进行解析
JSON 转换为 OC数据类型
二、json的解析方案
- 在iOS中,JSON的常见解析方案有4种
- 第三方框架:JSONKit、SBJson、TouchJSON(性能从左到右,越差)
- 苹果原生(自带):
NSJSONSerialization
(性能最好)
-
NSJSONSerialization的常见方法
-
格式示例:
- JSON数据(NSData) -> OC对象(Foundation Object)
- {} -> NSDictionary @{}
- [] -> NSArray @[]
- "jack" -> NSString @"jack"
- 10 -> NSNumber @10
- 10.5 -> NSNumber @10.5
- true -> NSNumber @1
- false -> NSNumber @0
- null -> NSNull
- JSON数据(NSData) -> OC对象(Foundation Object)
JSON数据(NSData) -> OC对象(Foundation Object)
+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;
参数 NSJSONReadingOptions
- NSJSONReadingMutableContainers = (1UL << 0)
- 创建出来的数组和字典就是可变
- NSJSONReadingMutableLeaves = (1UL << 1)
- 数组或者字典里面的字符串是可变的(暂时不太好用)
- NSJSONReadingAllowFragments
- 允许解析出来的对象不是字典或者数组,比如直接是字符串或者NSNumber
- OC对象(Foundation Object)-> JSON数据(NSData)
+ (NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;
三、Tips
-
格式化服务器返回的JSON数据
- 在线格式化:http://tool.oschina.net/codeformat/json
- 将服务器返回的字典或者数组写成plist文件
-
一般 json 返回的数据要么是字典,要么是数组,用第三方框架完成字典数组到模型的转换。
-
字典转模型框架
-
Mantle
- 所有模型都必须继承自MTModel
-
JSONModel
- 所有模型都必须继承自JSONModel
-
MJExtension
- 不需要强制继承任何其他类
设计框架需要考虑的问题
- 侵入性
- 侵入性大就意味着很难离开这个框架
- 易用性
- 比如少量代码实现N多功能
- 扩展性
- 很容易给这个框架增加新框架