序列化与反序列化
序列化: 将数据结构或对象转换成二进制串的过程。
反序列化:将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程。
NSJSONSerialization
json->oc
一段服务器的json数据
1 | { |
二进制数据转json,方法1
2
3
4
5
6
7
8
9/*
* 第一个参数:json的二进制数据
* 第二个参数:
* NSJSONReadingMutableContainers = (1UL << 0),得到OC对象是可变的
* NSJSONReadingMutableLeaves = (1UL << 1), 字典和数组中的字符串都是可变的,iOS7以后出现很多问题,一般不会用到
* NSJSONReadingAllowFragments = (1UL << 2) 既不是字典也不是数组,则必须使用该枚举值 如果返回数据为@“\"hahahahaha\"”
* 第三个参数:错误信息
*/
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
举例
1 | NSURL *url = [NSURL URLWithString:@"http://127.0.0.1:8000/hello/name"]; |
输出结果1
2
3
4
52019-03-06 17:44:34.480939+0800 JsonDemo[5349:107008] {
code = 200;
data = hello;
msg = success;
}
oc->json
举例1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26/* 注意:并不是所有的OC对象都可以转化为json 例如字符串
* 顶层必须是NSArray或者NSDictionnary
* 所有的元素必须是 NSString, NSNumber, NSArray, NSDictionary, or NSNull
* 字典中所有的key必须是NSStrings类型的
* NSNumbers 不能是无穷大
*/
// 1、提供转化的OC字典
NSDictionary *dic = @{
@"code":@200,
@"data":[NSNull null],
@"msg":@"oh my json"
};
// 2、判断OC对象是否可以转换为json对象
BOOL isVaild = [NSJSONSerialization isValidJSONObject:dic];
if (isVaild) {
/*
* 第一个参数:需要序列化的数据
* 第二个参数:如果添加就输出排版美观效果 如果不添加按照默认输出
* NSJSONWritingPrettyPrinted = (1UL << 0)
*/
NSData *data = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:nil];
NSLog(@"%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
}else{
NSLog(@"该对象无法转换");
}
控制台输出1
2
3
4
52019-03-06 17:57:27.734633+0800 JsonDemo[6202:131086] {
"msg" : "oh my json",
"data" : null,
"code" : 200
}
MJExtension
安装
CocoaPods
1 | pod 'MJExtension' |
手动导入
github链接
使用
字典转模型
模型USER1
2
3
4
5
6
7
8
9@interface User : NSObject
@property(copy, nonatomic)NSString *name;
@property(copy, nonatomic)NSString *zhiye;
@property(copy, nonatomic)NSString *money;
@end
1 | NSDictionary *dict = @{ |
JSONString转模型
1 | // 1.Define a JSONString |
more
查看官方文档即可链接