美文网首页
OC之特殊json解析

OC之特殊json解析

作者: 佚名_i | 来源:发表于2018-04-28 00:10 被阅读12次

    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];
    
    

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

    相关文章

      网友评论

          本文标题:OC之特殊json解析

          本文链接:https://www.haomeiwen.com/subject/lzrwlftx.html