你在把字典转成object的时候还在按下面这样:

self.id = [jsonDict objectForKey:@"id"];
self.name = [jsonDict objectForKey:@"name"];
self.profileImageBig = [jsonDict objectForKey:@"profile_image_big"];
self.profileImageSmall = [jsonDict objectForKey:@"profile_image_small"];
self.profileImageSquare = [jsonDict objectForKey:@"profile_image_square"];
self.firstName = [jsonDict objectForKey:@"firstName"];
self.familyName = [jsonDict objectForKey:@"familyName"];
self.age = [jsonDict objectForKey:@"age"];

这样做你就out了,太繁琐,得判断值的nil,null,类型等。使用JSONModel这样即可搞定

@interface MyModel: JSONModel
@property (strong, nonatomic) NSString* id;
@property (strong, nonatomic) NSString* name;
(etc...)
@end

添加JSONModel

pod管理的直接pod 'JSONModel'

其它的直接去下载包:https://github.com/icanzilb/JSONModel

教程参考:

http://www.touch-code-magazine.com/JSONModel/

http://www.raywenderlich.com/12139/introduction-to-cocoapods

简单介绍几个方面

  1. 指定一个索引,例如:

    @property (strong, nonatomic) NSString<index>* name

    你看到有一个Index,作用就是可以直接在数组中查找符合条件的对象,例如查找数组中object的name是sharofat的对象可以像下面这样写:

    //查找index为sharofat的
    NSArray *loans = feed.loans;
    NSLog(@"modelWithIndexValue --->%@",[loans modelWithIndexValue:@"Sharofat"]);
  2. object的数组和dict的数组相互转换,objce转json,dict

    //将model的array转成dict的array
    NSMutableArray *dictArray = [LoanModel arrayOfDictionariesFromModels:feed.loans];
    NSLog(@"arrayOfDictionariesFromModels===>%@",dictArray); //将dict的array转成model的array
    NSMutableArray *modelArray = [LoanModel arrayOfModelsFromDictionaries:dictArray];
    NSLog(@"arrayOfModelsFromDictionaries===>%@",modelArray); LoanModel* loan = feed.loans[indexPath.row];
    NSLog(@"loan.toDictionary--->%@",loan.toDictionary);
    NSLog(@"loan.toJSONString--->%@",loan.toJSONString);
  3. json,dict转object时判断value

    -(BOOL)validate:(NSError**)err
    {
    if ([self.name isEqual:@"Winfred"]) {
    self.name = @"Winfred rewrite name";
    // return NO;
    }
    NSLog(@"Loan of %@", self.name);
    NSLog(@"sector of %@", self.modelSector);
    NSLog(@"plandate of %@", self.plandate);
    return YES;
    }
  4. 很重要的keyMapper,指定映射值,如果不指定就是默认的

    • 转换带下划线的,例如:user_name 转换对应的key就是userName


      +(JSONKeyMapper*)keyMapper
      {
      return [JSONKeyMapper mapperFromUnderscoreCaseToCamelCase];
      }
    • 自定义key,例如: planned_expiration_date转换想对应plandate

      +(JSONKeyMapper*)keyMapper
      {
      return [[JSONKeyMapper alloc] initWithJSONToModelBlock:^NSString *(NSString *keyName) { if ([keyName isEqual:@"planned_expiration_date"]) {
      return @"plandate";
      }else if ([keyName isEqual:@"sector"]) {
      return @"modelSector";
      }
      else {
      return keyName;
      } } modelToJSONBlock:^NSString *(NSString *keyName) { if ([keyName isEqual:@"plandate"]) {
      return @"planned_expiration_date";
      }else if ([keyName isEqual:@"modelSector"]) {
      return @"sector";
      }else {
      return keyName;
      } }];
      }

      也可以像下面这样写:

      +(JSONKeyMapper*)keyMapper {
      return [[JSONKeyMapper alloc]initWithDictionary:@{@"sector":@"modelSector"}];
      }
  5. 指定定义的key的类型

    • optional表示字段可选,例如

      //链接字段是可选的,转换的时候允许link为空
      @property (nonatomic,strong) NSString<optional> *link;
    • index表示索引,参照1

    • convertondemand转换对象数组,例如:

      //表示数组是LoanModel对象
      @property (strong, nonatomic) NSArray<loanmodel , ConvertOnDemand>* loans;

JSONModel解析Dictionary To Model /JSON To Model的更多相关文章

  1. 【疯狂造轮子-iOS】JSON转Model系列之一

    [疯狂造轮子-iOS]JSON转Model系列之一 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 之前一直看别人的源码,虽然对自己提升比较大,但毕竟不是自己写的,很容易遗 ...

  2. Swift实现JSON转Model - HandyJSON使用讲解

    背景: 很多时候,我们从服务端请求下的数据都是Json格式,我们需要拿这些数据显示到我们的UI界面. 因此,我们的做法基本都会先将json转为方便使用的数据模型,或者也可以直接转字典解决. 在OC中, ...

  3. 【疯狂造轮子-iOS】JSON转Model系列之二

    [疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...

  4. Codable实现json转Model,是时候干掉HandyJSON了!

    自从开始使用Swift做项目,一直都在使用HandyJSON,不可否认,HandyJSON在Swift4.0是个好东西,也尝试过其它json转mode的工具,最终发现还是HandyJSON最好用. 去 ...

  5. C# json转model 以及model转json

    1.json转model TestModel tm = new TestModel(); JavaScriptSerializer js = new JavaScriptSerializer();tm ...

  6. Flutter json 2 model with Built Value

    Flutter json 2 model with Built Value Flutter中json转换model, 除了手动转之外, 就是利用第三方库做一些代码生成. 流行的库有: json_ser ...

  7. 使用GSON和泛型解析约定格式的JSON串(转)

    时间紧张,先记一笔,后续优化与完善. 解决的问题: 使用GSON和泛型解析约定格式的JSON串. 背景介绍: 1.使用GSON来进行JSON串与java代码的互相转换. 2.JSON的格式如下三种: ...

  8. 控制层解析post请求中json数据的时候,有些属性值为空

    原因: 1.默认json数据解析的时候,值会赋给键的首字母是小写的封装的bean中的属性,如果没有首字母小写的属性,也不会报错.即bean中有getXXX方法时,从json到model会增加xxx属性 ...

  9. MVC中@Html.DisPlayFor(model=>model.newsName)和 @Model.newsName的区别

    MVC中,在Controllers查询到数据,返回一个实体给View并显示,可以用@Html.DisPlayFor(model=>model.newsName)和 @Model.newsName ...

随机推荐

  1. Spring Boot 学习系列(03)—jar or war,做出你的选择

    此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 两种打包方式 采用Spring Boot框架来构建项目,我们对项目的打包有两种方式可供选择,一种仍保持原有的 ...

  2. Mac OS 系统占用储存空间太大怎么办?

    存储空间 121 GB,系统就占用 106G,然后就是不断的弹窗提醒你! 解决方法: 终端先执行一下 du -sh * 查看具体是哪里使用了存储空间,一般都是 library 占用比较多的空间, 把可 ...

  3. maven学习(十四)——Eclipse中使用Maven插件

    1.导入Maven项目 File→import

  4. Linux常用命令与基本概念

    复制 文件的复制 cp 源文件 目标文件 文件夹的复制 cp -r 源文件夹 目标文件夹 删除 删除文件 rm 文件名 删除文件夹 rm -rf 文件夹 查看文件类型 file 文件名 压缩与解压 z ...

  5. iOS开发UI篇—自定义layer

    一.第一种方式 1.简单说明 以前想要在view中画东西,需要自定义view,创建一个类与之关联,让这个类继承自UIView,然后重写它的DrawRect:方法,然后在该方法中画图. 绘制图形的步骤: ...

  6. iOS开发UI篇—CALayer

      一.简单介绍 在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是UIView. 其实UIView之所以能显示在屏幕上,完全 ...

  7. 2018 ACM南京网络赛H题Set解题报告

    题目描述 给定\(n\)个数$a_i$,起初第\(i\)个数在第\(i\)个集合.有三种操作(共\(m\)次): 1 $u$ $v$ 将第$u$个数和第$v$个数所在集合合并 2 $u$ 将第$u$个 ...

  8. [usaco jan 09] 气象牛 baric [dp]

    题面: 传送门 思路: 题意有点绕,实际上就是给你一个计算规则,让你取最少的元素,通过这个计算方式,得到一个小于指定误差上限的结果 这个规则分为三个部分,这里分别用pre,sum,suf表示 因为给定 ...

  9. 基于webpack搭建vue-cli以及webstorm的设置

    N1.检查本地电脑是否安装node和npm 安装vue-cli的前提是已经安装了npm 是否安装npm检查命令 npm -v 如果出现版本号,说明已经安装了npm 查看node版本号 node -v ...

  10. How Many to Be Happy?

    How Many to Be Happy? 时间限制: 1 Sec  内存限制: 128 MB 题目描述 Let G be a connected simple undirected graph wh ...