MJExtension解析复杂的数据(模型嵌模型,即:多级嵌套)

  • 急于分享,不说废话了,请看↓。

Json数据如下
  • 文字描述如下Json数据的格式:
    • 字典A内嵌数组B(infor对应的value)
    • 数组B内嵌字典C
    • 字典C又内嵌数组D1和D2。 (D1是workerItems对应的value;D2是imgItems对应的value)
    • 数组D1又内嵌字典E1,E2。数组D2又内嵌字典F1,F2
{// 字典A
  "success" : true,
  "msg" : "操作成功!",
  "infor" : [// 数组B
    {// 字典C
      "bill_sn" : "201708231014474483",
      "regdate" : "2017-08-23 10:14:47",
      "classname" : "钟点工 ",
      "statetype" : "1",
      "payflag" : "0",
      "startdate" : "2017-09-03 10:10:00",
      "needcount" : "3",
      "blog_regdate" : "2017-08-23 10:14:05",
      "buydate" : null,
      "applycount" : "2",
      "returnflag" : "0",
      "name" : "钟点工",
      "enddate" : null,
      "signup_enddate" : "2017-08-29 10:13:00",
      "tagnames" : "干活吧少年",
      "id" : "691",
      "total_fee" : null,
      "blog_id" : "1070",
      "tradetype" : "0",
      "workerItems" : [// 数组D1,包含两个大字典
        {// 字典E1
          "replytype" : "0",
          "applydate" : null,
          "regdate" : "2017-08-23 10:14:47",
          "hirer_reply_id" : "0",
          "nickname" : "曹进如",
          "statetype" : "0",
          "push_acceptdate" : null,
          "hirer_replytype" : "0",
          "bill_id" : "691",
          "id" : "1144",
          "blog_id" : "1070",
          "reply_id" : "0",
          "handledate" : null,
          "mobile" : "18363833309",
          "client_id" : "257",
          "clientcount" : "1",
          "checkinflag" : "0",
          "acceptflag" : "0",
          "acceptdate" : null,
          "reason" : null,
          "avatar" : "http:\/\/yimiaozhaopin.com\/uploadfiles\/2017\/07\/201707130957187653_thumb.jpg",
          "servicetype" : "0",
          "worker_flag" : "2",
          "age" : "35",
          "username" : "18363833309"
        },
        {// 字典E2
          "replytype" : "0",
          "applydate" : null,
          "regdate" : "2017-08-23 10:15:40",
          "hirer_reply_id" : "0",
          "nickname" : "王小海",
          "statetype" : "0",
          "push_acceptdate" : null,
          "hirer_replytype" : "0",
          "bill_id" : "691",
          "id" : "1145",
          "blog_id" : "1070",
          "reply_id" : "0",
          "handledate" : null,
          "mobile" : "18363830000",
          "client_id" : "912",
          "clientcount" : "1",
          "checkinflag" : "0",
          "acceptflag" : "0",
          "acceptdate" : null,
          "reason" : null,
          "avatar" : "http:\/\/yimiaozhaopin.com\/uploadfiles\/2017\/08\/201708181728428553_thumb.jpg",
          "servicetype" : "0",
          "worker_flag" : "2",
          "age" : "27",
          "username" : "18363385018"
        }
      ],
      "imgItems" : [// 数组D2,包含两个大字典
        {// 字典F1
          "id" : "2538",
          "imgurlbig" : "http:\/\/yimiaozhaopin.com\/uploadfiles\/2017\/08\/201708231014046642.jpg",
          "imgurl" : "http:\/\/yimiaozhaopin.com\/uploadfiles\/2017\/08\/201708231014046642_thumb.jpg",
          "keytype" : "2",
          "orderby" : "0",
          "imgheight" : "480",
          "authtype" : "0",
          "keyid" : "1070",
          "regdate" : "2017-08-23 10:14:05",
          "client_id" : "116",
          "imgwidth" : "640",
          "content" : null
        },
        {// 字典F2
          "id" : "2539",
          "imgurlbig" : "http:\/\/yimiaozhaopin.com\/uploadfiles\/2017\/08\/201708231014042070.jpg",
          "imgurl" : "http:\/\/yimiaozhaopin.com\/uploadfiles\/2017\/08\/201708231014042070_thumb.jpg",
          "keytype" : "2",
          "orderby" : "1",
          "imgheight" : "640",
          "authtype" : "0",
          "keyid" : "1070",
          "regdate" : "2017-08-23 10:14:05",
          "client_id" : "116",
          "imgwidth" : "359",
          "content" : null
        }
      ],
      "closedate" : null,
      "price" : "100.0",
      "address" : "山东省日照市东港区日照街道日照大学生创业园",
      "content" : "努力吧"
    }
  ]
}

表视图格式如下

系统返回的json数据格式.png

解析很简单:

  • 正确写法:无论AS_ZBPostOrderDetailModel模型中嵌套了多少(模型)数组,一定只要用一个mj_setupObjectClassInArray:方法来包装两个模型数组。
        NSArray *temArr = [info objectForKey:@"infor"];
        // id用postOrderID替代,模型中直接声明postOrderID属性,不用再声明id了。id为系统字段,所以必须替换成常规字段。
        [AS_ZBPostOrderDetailModel mj_setupReplacedKeyFromPropertyName:^NSDictionary *{
            return @{@"OrderDetailID" : @"id"};
        }];
        ************正确步骤1:************
       // AS_ZBPostOrderDetailModel模型中嵌套了两个模型数组,一定要按照如下的格式写,不要分开。
       // 告诉MJExtension这个框架AS_ZBPostOrderDetailModel的workerItems数组属性中装的是AS_ZBPostOrderWorkerItemModel 模型,imgItems数组属性中装的是AS_ZBPostOrderImgItemModel 模型
        [AS_ZBPostOrderDetailModel mj_setupObjectClassInArray:^NSDictionary *{
            return @{@"workerItems" : @"AS_ZBPostOrderWorkerItemModel",
                     @"imgItems" : @"AS_ZBPostOrderImgItemModel"
                     };
        }];
        ************正确步骤2:************
        self.Marray = [AS_ZBPostOrderDetailModel mj_objectArrayWithKeyValuesArray:temArr];

  • 错误写法(楼主经历过):执行了两次mj_setupObjectClassInArray:方法。B会覆盖掉A.所以A就相当于没有转成AS_ZBPostOrderWorkerItemModel模型
 NSArray *temArr = [info objectForKey:@"infor"];
        // id用postOrderID替代,直接声明postOrderID属性即可
        [AS_ZBPostOrderDetailModel mj_setupReplacedKeyFromPropertyName:^NSDictionary *{
            return @{@"OrderDetailID" : @"id"};
        }];
        
      // A
        [AS_ZBPostOrderDetailModel mj_setupObjectClassInArray:^NSDictionary *{
            return @{@"workerItems" : @"AS_ZBPostOrderWorkerItemModel",
                     };
        }];
        // B
        [AS_ZBPostOrderDetailModel mj_setupObjectClassInArray:^NSDictionary *{
            return @{@"imgItems" : @"AS_ZBPostOrderImgItemModel"
                     };
        }];
        self.Marray = [AS_ZBPostOrderDetailModel mj_objectArrayWithKeyValuesArray:temArr];


备注:无论系统返回的JSON数据有多复杂(例如上面Json数据),一定要锁定到字典,然后才可以对该锁定的字典可以进行字典转模型。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容