JSON解析

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)

+ (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多功能
  • 扩展性
    • 很容易给这个框架增加新框架

你可能感兴趣的:(JSON解析)