文档章节

json的序列化

闲云悠鹤蝶恋舞
 闲云悠鹤蝶恋舞
发布于 2016/01/18 01:14
字数 553
阅读 56
收藏 0

// json序列化的条件:

    // 1.The top level object is an NSArray or NSDictionary.(数据的最外层必须是数组或字典)

    // 2.All objects are instances of NSString, NSNumber, NSArray, NSDictionary, or NSNull.(所有对象必须是NSString, NSNumber, NSArray, NSDictionary, or NSNull类型的对象)

    // 3.All dictionary keys are instances of NSString.(字典中的键必须是NSString类型的对象)

    // 4.Numbers are not NaN or infinity.(数据中Numbers不能为空或无穷大)

使用json序列化的几种情况:

1.手动拼接json

   
    NSString *string = @"{\"name\":\"zhangsan\",\"age\":\"26\"}";
    NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding]];


 2.字典

    
    NSDictionary *dict = @{@"name":@"zhangsan",@"age":@"27"};
    // json的序列化(将对象转换为二进制数据)
    NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:0 error:NULL];


3.数组

 NSDictionary *dict1 = @{@"name":@"zhangsan",@"age":@"27"};
 NSDictionary *dict2 = @{@"name":@"lisi",@"age":@"28"};
 NSArray *arr = @[dict1,dict2];
 // json的序列化
 NSData *data = [NSJSONSerialization dataWithJSONObject:arr options:0 error:NULL];


4.自定义对象

Person *p1 = [[Person alloc] init];
p1.name = @"zhangsan";
p1.age = 24;
[p1 setValue:@(YES) forKey:@"_isYellow"];

// json的序列化

    // 这种方式是错误的,运行的时候会崩的,因为这中数据不符合json序列化的条件

    // json序列化的条件:

    // 1.The top level object is an NSArray or NSDictionary.

    // 2.All objects are instances of NSString, NSNumber, NSArray, NSDictionary, or NSNull.

    // 3.All dictionary keys are instances of NSString.

    // 4.Numbers are not NaN or infinity.

NSData *data = [NSJSONSerialization dataWithJSONObject:p1 options:0 error:NULL];

//正确的写法:

// 对象转字典
   NSDictionary *dict = [p1 dictionaryWithValuesForKeys:@[@"name",@"age",@"_isYellow"]];
// json序列化
   NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:0 error:NULL];


5.集合


    
    Person *p1 = [[Person alloc] init];
    p1.name = @"zhangsan";
    p1.age = 24;
    [p1 setValue:@(YES) forKey:@"_isYellow"];
    
    Person *p2 = [[Person alloc] init];
    p2.name = @"lisi";
    p2.age = 25;
    [p2 setValue:@(NO) forKey:@"_isYellow"];
    
    NSArray *arr = @[p1,p2];
    
    // 遍历:将数组中的对象转换为字典
    NSMutableArray *mutArr = [NSMutableArray array];
    [arr enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        NSDictionary *dict = [obj dictionaryWithValuesForKeys:@[@"name",@"age",@"_isYellow"]];
        [mutArr addObject:dict];
    }];
    
    // json的序列化
    NSData *data = [NSJSONSerialization dataWithJSONObject:mutArr options:0 error:NULL];







© 著作权归作者所有

闲云悠鹤蝶恋舞
粉丝 1
博文 40
码字总数 1731
作品 0
朝阳
程序员
私信 提问
.NET 中的序列化 & 反序列化

序列化:将对象的状态信息及类型信息,转换为一种易于传输或存储形式(流,即字节序列)的过程。 下图为序列化过程图示,图片来自微软官方文档: 反序列化:与序列化相反,将流转换为对象的过...

雪飞鸿
01/28
0
0
Java序列化与JSON序列化大比拼

一、背景 有项目需要传输Map结构的数据,有人倾向用Java序列化来做,有人倾向用JSON的序列化来做。所以我们还是比比吧。 Java观点:Object2Object,使用时简单快速。 JSON观点:JSON格式与语...

NoahX
2013/03/10
0
20
Python3中json的操纵

在python中提供了标准库json将基本类型的数据转化成json格式,但是在涉及到自定义类型时需要扩展或者复写Encoder(Decoder)来实现,默认情况下json会抛出"TypeErro: xxx is not json serial...

gangzz
2014/02/16
0
0
AspNetCore Json序列化设置

AspNetCore 中的Json序列化处理已经默认使用Newtonsoft.Json库了... 比如像MVC中: 不过使用过程中会发现一些问题,其实这算默认设置吧: Json序列化后的字段格式会变成小驼峰形式 Json序列化时...

taadis
2017/12/20
0
0
基于Json序列化和反序列化通用的封装

1. 最近项目已经上线了 ,闲暇了几天 想将JSON的序列化以及反序列化进行重新的封装一下本人定义为JSONHelp,虽然Microsoft 已经做的很好了。但是我想封装一套为自己开发的项目使用。方便后期...

zsdnr
2017/07/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

typescript 接口 函数类型 可索引类型

函数类型 可索引类型 数字索引签名 字符串索引签名 数字索引签名返回值 必须是 字符串索引签名返回值的子集 只读索引签名

lilugirl
今天
3
0
Oracle SQL语法实例合集

如需转载请注明出处https://my.oschina.net/feistel/blog/3052024 目的:迅速激活Oracle SQL 参考:《Oracle从入门到精通》 ------------------------------------------------------------......

LoSingSang
今天
2
0
增加 PostgreSQL 服务进程的最大打开文件数

https://serverfault.com/questions/628610/increasing-nproc-for-processes-launched-by-systemd-on-centos-7 要在systemd的配置里加才行...

helloclia
今天
2
0
组合模式在商品分类列表中的应用

在所有的树形结构中最适合的设计模式就是组合模式,我们看看常用商品分类中如何使用。 先定义一个树形结构的商品接口 public interface TreeProduct { List<TreeProduct> allProducts(...

算法之名
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部