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 ...
随机推荐
- 设计模式之第4章-装饰模式(Java实现)
设计模式之第4章-装饰模式(Java实现) “怎么了,鱼哥?” “唉,别提了,网购了一件衣服,结果发现和商家描述的差太多了,有色差就算了,质量还不好,质量不好就算了,竟然大小也不行,说好的3个X,邮的 ...
- 【Unique Paths II】cpp
题目: Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. H ...
- leetcode 【 Majority Element 】python 实现
题目: Given an array of size n, find the majority element. The majority element is the element that ap ...
- C 语言 习题 1-9
练习1-9 编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替. #include <stdio.h> int main(int argc, char const *ar ...
- IOS开发学习笔记029-反选、全选、删除按钮的实现
还是在上一个程序的基础上进行修改 1.反选按钮 2.全选按钮 3.删除按钮 4.其他代码优化 1.反选按钮 反选的过程就是将_deleteShops数组中得数据清空,然后将Shops中数组添加到_de ...
- PAT——乙级1001and1011
准备明年年初考PAT,练题呀,暂且先把LeetCode放下. 我是按照算法笔记这个教材刷的. B1001 1001 害死人不偿命的(3n+1)猜想 (15 point(s)) 卡拉兹(Callatz) ...
- 商城商品购买数量增减的完美JS效果
近期在开发一个地方O2O租书项目,使用ASP.NET MVC技术,其中在图书详情页,用户可以输入借阅的数量,这里使用了js来控制数量的增减和校验. 数量一定是数字 点击增减按钮的时候要能自动加1或减1 ...
- 【转】Unity3d中制作Loading场景进度条所遇到的问题 LoadLevelAsync,AsyncOperation
背景 通常游戏的主场景包含的资源较多,这会导致加载场景的时间较长.为了避免这个问题,可以首先加载Loading场景,然后再通过Loading场景来加载主场景.因为Loading场景包含的资源较少,所以 ...
- 【bzoj3998】[TJOI2015]弦论 后缀自动机+dp
题目描述 对于一个给定长度为N的字符串,求它的第K小子串是什么. 输入 第一行是一个仅由小写英文字母构成的字符串S 第二行为两个整数T和K,T为0则表示不同位置的相同子串算作一个.T=1则表示不同位置 ...
- home.php
home.php <?php error_reporting(0); //抑制所有错误信息 @header("content-Type: text/html; charset=utf- ...