JSONModel解析Dictionary To Model /JSON To Model
你在把字典转成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
简单介绍几个方面
指定一个索引,例如:
@property (strong, nonatomic) NSString<index>* name
你看到有一个Index,作用就是可以直接在数组中查找符合条件的对象,例如查找数组中object的name是sharofat的对象可以像下面这样写:
//查找index为sharofat的
NSArray *loans = feed.loans;
NSLog(@"modelWithIndexValue --->%@",[loans modelWithIndexValue:@"Sharofat"]);
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);
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;
}
很重要的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"}];
}
指定定义的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的更多相关文章
- 【疯狂造轮子-iOS】JSON转Model系列之一
[疯狂造轮子-iOS]JSON转Model系列之一 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 之前一直看别人的源码,虽然对自己提升比较大,但毕竟不是自己写的,很容易遗 ...
- Swift实现JSON转Model - HandyJSON使用讲解
背景: 很多时候,我们从服务端请求下的数据都是Json格式,我们需要拿这些数据显示到我们的UI界面. 因此,我们的做法基本都会先将json转为方便使用的数据模型,或者也可以直接转字典解决. 在OC中, ...
- 【疯狂造轮子-iOS】JSON转Model系列之二
[疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...
- Codable实现json转Model,是时候干掉HandyJSON了!
自从开始使用Swift做项目,一直都在使用HandyJSON,不可否认,HandyJSON在Swift4.0是个好东西,也尝试过其它json转mode的工具,最终发现还是HandyJSON最好用. 去 ...
- C# json转model 以及model转json
1.json转model TestModel tm = new TestModel(); JavaScriptSerializer js = new JavaScriptSerializer();tm ...
- Flutter json 2 model with Built Value
Flutter json 2 model with Built Value Flutter中json转换model, 除了手动转之外, 就是利用第三方库做一些代码生成. 流行的库有: json_ser ...
- 使用GSON和泛型解析约定格式的JSON串(转)
时间紧张,先记一笔,后续优化与完善. 解决的问题: 使用GSON和泛型解析约定格式的JSON串. 背景介绍: 1.使用GSON来进行JSON串与java代码的互相转换. 2.JSON的格式如下三种: ...
- 控制层解析post请求中json数据的时候,有些属性值为空
原因: 1.默认json数据解析的时候,值会赋给键的首字母是小写的封装的bean中的属性,如果没有首字母小写的属性,也不会报错.即bean中有getXXX方法时,从json到model会增加xxx属性 ...
- MVC中@Html.DisPlayFor(model=>model.newsName)和 @Model.newsName的区别
MVC中,在Controllers查询到数据,返回一个实体给View并显示,可以用@Html.DisPlayFor(model=>model.newsName)和 @Model.newsName ...
随机推荐
- loj2071 「JSOI2016」最佳团体
分数规划+树形依赖背包orz #include <iostream> #include <cstring> #include <cstdio> #include & ...
- Tensorflow实现Mask R-CNN实例分割通用框架,检测,分割和特征点定位一次搞定(多图)
Mask R-CNN实例分割通用框架,检测,分割和特征点定位一次搞定(多图) 导语:Mask R-CNN是Faster R-CNN的扩展形式,能够有效地检测图像中的目标,同时还能为每个实例生成一个 ...
- 不同storyboard间跳转
小项目中用到storyboard,可以按照模块来新建多个sb. 以下是代码实现跳转实现: UIStoryboard *anSb=[UIStoryboard storyboardWithName:@&q ...
- 嵌入式tcpip
嵌入式tcpip方案 目前高端一点的嵌入式处理器,如STM32F107,都带有MAC,因此用户在实现网络功能的时候,只需要外界PHY层的芯片, 目前使用比较都的是DM9161A.网上的驱动也比较多,开 ...
- 解决pymysql不能实时查询最新的数据
#在网上查询到的原因为: InnoDB 的默认隔离级别.它可以防止任何被查询的行被其他事务更改,从而阻止不可重复的读取,而不是 幻读取.它使用中度严格的锁定策略,以便事务内的所有查询都会查看同一快照中 ...
- SQL 语句执行后同步返回结果条数
PgSQL SELECT COUNT(*) OVER() AS res_count FROM table WHERE ... MySQL mysql> SELECT SQL_CALC_FOUND ...
- Python 拓展之推导式
写在之前 推导式是从一个或多个迭代器快速简洁的创建数据结构的一种办法,它可以将循环和条件判断结合,从而可以避免语法冗长的代码. 列表推导式 我在之前的文章中(零基础学习 Python 之 for 循环 ...
- Leetcode 576.出界的路劲数
出界的路径数 给定一个 m × n 的网格和一个球.球的起始坐标为 (i,j) ,你可以将球移到相邻的单元格内,或者往上.下.左.右四个方向上移动使球穿过网格边界.但是,你最多可以移动 N 次.找出可 ...
- Pipenv 学习笔记
个人笔记,胡言乱语.并不是什么教学向文章.. 前言 在学习了 Python.Java 后,会发现 Java 有很成熟的项目构建工具,以前是使用 xml 的 Maven,现在又出现了使用 groovy ...
- ci日志记录
log_message($level, $message) 参数: $level (string) -- Log level: 'error', 'debug' or 'info' $message ...