2018年04月28日
后台返回的json数据如下,是一个非标准的json的数据,但是符合json的格式,格式化如下图。
{
"3": {
"name": "王小",
"Num": 29
},
"4": {
"name": "李芸",
"Num": 27
},
"0": {
"name": "小刘",
"Num": 30
},
"5": {
"name": "王天天65",
"Num": 18
},
"1": {
"name": "李连禹",
"Num": 30
},
"6": {
"name": "王小八123",
"Num": 7
},
"2": {
"name": "王小六",
"Num": 30
},
"Self_ranking": {
"count": 51,
"Num": 0
}
}

与我们常见的json的键值对不同,这里的键也是数据中重要的一环,而以前我只看重值。要想转换成对应的模式,就要看清出这个数据结构,一个对象里面有很多小对象,这项小对象的类型时不同的,安装常规转化是会出问题的,即使不出问题也不符合建模的标准,强制转成模型的代码也是非常low的。而且小对象的数量是不定的,那么外的模型的属性就不好确定,又扯远了说重点小对象就是字典不要转换成模型是最好的选择,即使将小对象当做NSDictionary处理,也会存在问题,那就是大模型缺点什么,对那就是key,OC中不存在匿名对象这么一说,这种数据也是解析不成数组的,那么方法就出来了。将这个json对象保证成为字典,然后再通过字典转模型。
具体实现方式参见下方伪代码:
// 定义一个YKDictionary的模型,实现部分没有要求
@interface YKDictionary: NSObject
@property (nonatomic, strong)NSDictionary *dic
@end
// 请求得到的json 对象
id responseObject
NSDictionary *dict = @{@"dic":responseObject};
// 解析 + (nullable instancetype)yy_modelWithJSON:(id)json;
//或者+ (nullable instancetype)yy_modelWithDictionary:(NSDictionary *)dictionary;均可
YKDictionary *ykDict = [YKDictionary yy_modelWithJSON:dic];
// 直接使用dic属性即可 ,遍历或者创建一个对象,将dic的所有信息赋值给这个新建的对象。
NSArrary *keys = [ykDict.dic allKeys];
当然如果你有更好的解决方案,欢迎一起讨论😀
网友评论