概述
JOSN是一种轻量级的数据格式,一般用于数据交互。服务器返回给客户端,一般都是JSON格式或者XML格式。
JSON的格式:{"name" : "CoderHong", "age": "12"}
{"names" : ["CoderHong", "Rose", "Jake"]}
标准的JSON格式建议使用key必须双引号
,如果使用单引号有些第三方框架解析过程会出现问题。
JSON解析
JSON在转换过程中JSON中的数据类型都会转成OC对象。JSON数据类型与OC对象的的映射表。
JSON解析方案
在iOS 5.0之前,开发中使用有很多的第三方框架:JSONKit、SBJson、TouchJSON(性能从左到右依次降低)。
在iOS 5.0之后,苹果提供了原生 NSJSONSerialization
。目前性能最好,开发建议使用。
NSJSONSerialization常见方法
反序列化
+ (nullable id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;
1. 参数data必须是可以反序列化的 并且返回error信息
2. 参数data不能为nil,否者抛出异常
返回值为OC的id类型。第二个参数是一个枚举取值为:
- NSJSONReadingMutableContainers 返回的是一个可变的对象(容器)
- NSJSONReadingMutableLeaves 返回的是一个可变的对象(容器),并且里面的小节点容器也是可变的
- NSJSONReadingAllowFragments 允许最外面返回的不是必须是字典或者数组可以直接返回NSNumber。
如果服务端返回标准的JOSN数据,并且不要求返回的是可变数组或字典传递kNilOptions效率最高。
序列化
将OC中的对象(字典,数组)转成JSON字符串
+ (nullable NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;
第一个参数OC中的字典或数组对象。第二个参数是一个枚举值,取值有NSJSONWritingPrettyPrinted、NSJSONWritingSortedKeys,主要用于在控制台数据的格式。可以传递NSJSONWritingPrettyPrinted输出的JSON字符串是有数据格式的。
注意:如果该方法传入的obj不是有效的JSON会内部会抛出异常,程序奔溃
因此在调用方法先使用NSJSONSerialization类方法做检查,避免奔溃。
实例:
NSDictionary *dict = @{@"name": @"CoderHong", @"age": @(12)};
BOOL isValid = [NSJSONSerialization isValidJSONObject:dict];
if(isValid){
NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingSortedKeys error:nil];
NSString *jsonStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
字典转模型框架
字典转模型根据时间顺序常用的框架 Mantle、 JOSNModel、MjExtension。
JSONModel框架使用时需要工程中的模型继承JOSNModel。MJExtension框架使用时不需要工程中的模型继承,性能最好。