OC之特殊json解析

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
  }
}
OC之特殊json解析_第1张图片
格式化后的图片

与我们常见的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];

当然如果你有更好的解决方案,欢迎一起讨论

你可能感兴趣的:(OC之特殊json解析)