JSONModel的基本使用

JSONModel 是一个库,它能智能并且快速的创建出数据 model,你可以在你的 iOS 项目或者 OSX 项目上使用它。

使用前准备

添加 JSONModel 到你的工程中

1、需要的环境:

  • ARC,iOS 5.0+ / OSX 10.7 +
  • 引入框架SystemConfiguration.framework

2、获取途径:

  1)、通过源文件获取* 下载 JSONModel zip包*  将 JSONModel 文件夹拷贝到你的工程项目中*  将库 SystemConfiguration.framework 添加上         2)、使用 Cocoa pods 来安装:pod 'JSONModel'

3、源码的文档:

源码本身包含了类的文档,你可以自己编译后导入到你的Xcode中:

  • 如果你还没安装 appledoc ,先安装 appledoc
  • 在Xcode上键入 appledoc 安装文档,在根目录下
  • 重启Xcode

基本使用

假设你的 JSON 串像下面这样子:

{"id":"10", "country":"Germany", "dialCode": 49, "isInEurope":true}
  • 创建一个你自己的类,并继承至 JSONModel
  • 在你的头文件里面进行声明你所需要的 JSON key值
#import "JSONModel.h"@interface CountryModel : JSONModel@property (assign, nonatomic) int id;
@property (strong, nonatomic) NSString* country;
@property (strong, nonatomic) NSString* dialCode;
@property (assign, nonatomic) BOOL isInEurope;@end

.m文件中你不需要做其他的事情了.

初始化你的 model ,如下所示:

#import "CountryModel.h"
...NSString* json = (fetch here JSON from Internet) ... 
NSError* err = nil;
CountryModel* country = [[CountryModel alloc] initWithString:json error:&err];

如果传过来的 JSON 合法,你所定义的所有的属性都会与该 JSON 值相匹配,并且 JSONModel 也会尝试尽可能的转换成你所想要的数据,就像上面的例子:

  • 转化 "id",从字符串转换成 int 型
  • 拷贝 country 属性的值
  • 转换 dialCode ,从NSNumber 转换为 NSString 值
  • 最后一个呢是将 isInEurope 转换成 BOOL 的属性

所以,你需要做的就是定义出你期望的属性就行了。

例子

命名自动匹配

{"id": "123","name": "Product name","price": 12.95
}
@interface ProductModel : JSONModel@property (assign, nonatomic) int id;
@property (strong, nonatomic) NSString* name;
@property (assign, nonatomic) float price;@end@implementation ProductModel@end

model中含有其他的model

{"order_id": 104,"total_price": 13.45,"product" : {"id": "123","name": "Product name","price": 12.95}
}
@interface OrderModel : JSONModel@property (assign, nonatomic) int order_id;
@property (assign, nonatomic) float total_price;
@property (strong, nonatomic) ProductModel* product;@end@implementation OrderModel@end

model中含有其他model的集合

{"order_id": 104,"total_price": 103.45,"products" : [{"id": "123","name": "Product #1","price": 12.95},{"id": "137","name": "Product #2","price": 82.95}]
}
@protocol ProductModel@end@interface ProductModel : JSONModel@property (assign, nonatomic) int id;
@property (strong, nonatomic) NSString* name;
@property (assign, nonatomic) float price;@end@implementation ProductModel@end@interface OrderModel : JSONModel@property (assign, nonatomic) int order_id;
@property (assign, nonatomic) float total_price;
@property (strong, nonatomic) NSArray<ProductModel>* products;@end@implementation OrderModel@end

键值转回匹配

{"order_id": 104,"order_details" : [{"name": "Product#1","price": {"usd": 12.95}}]
}
@interface OrderModel : JSONModel@property (assign, nonatomic) int id;
@property (assign, nonatomic) float price;
@property (strong, nonatomic) NSString* productName;@end@implementation OrderModel+ (JSONKeyMapper*)keyMapper
{return [[JSONKeyMapper alloc] initWithDictionary:@{@"order_id": @"id",@"order_details.name": @"productName",@"order_details.price.usd": @"price"}];
}@end

设置全局的键值转回匹配

[JSONModel setGlobalKeyMapper:[[JSONKeyMapper alloc] initWithDictionary:@{@"item_id":@"ID",@"item.name": @"itemName"}]
];

将下滑线转换成首字母大写

{"order_id": 104,"order_product" : @"Product#1","order_price" : 12.95
}
@interface OrderModel : JSONModel@property (assign, nonatomic) int orderId;
@property (assign, nonatomic) float orderPrice;
@property (strong, nonatomic) NSString* orderProduct;@end@implementation OrderModel+ (JSONKeyMapper*)keyMapper
{return [JSONKeyMapper mapperFromUnderscoreCaseToCamelCase];
}@end

可以为空的属性值

{"id": "123","name": null,"price": 12.95
}
@interface ProductModel : JSONModel@property (assign, nonatomic) int id;
@property (strong, nonatomic) NSString<Optional>* name;
@property (assign, nonatomic) float price;
@property (strong, nonatomic) NSNumber<Optional>* uuid;@end@implementation ProductModel@end

忽略某些属性

{"id": "123","name": null
}
@interface ProductModel : JSONModel@property (assign, nonatomic) int id;
@property (strong, nonatomic) NSString<Ignore>* customProperty;@end@implementation ProductModel@end

让所有的属性都可以有空的属性值

@implementation ProductModel+ (BOOL)propertyIsOptional:(NSString*)propertyName
{return YES;
}@end

将集合元素转换成 model

{"order_id": 104,"total_price": 103.45,"products" : [{"id": "123","name": "Product #1","price": 12.95},{"id": "137","name": "Product #2","price": 82.95}]
}
@protocol ProductModel@end@interface ProductModel : JSONModel@property (assign, nonatomic) int id;
@property (strong, nonatomic) NSString* name;
@property (assign, nonatomic) float price;@end@implementation ProductModel@end@interface OrderModel : JSONModel@property (assign, nonatomic) int order_id;
@property (assign, nonatomic) float total_price;
@property (strong, nonatomic) NSArray<ProductModel, ConvertOnDemand>* products;@end@implementation OrderModel@end

转载于:https://www.cnblogs.com/iyou/p/4861666.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256620.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图像处理 伽玛校正

http://blog.csdn.net/lichengyu/article/details/20840135 本质上是关于灰度的一个幂函数&#xff0c;当系数gamma大于1时&#xff0c;低灰度值的动态范围减小&#xff0c;高灰度值的动态范围增大&#xff0c;整体的灰度值减小&#xff1b;gamma小于1时则相反&#xff1b; 人…

matlab常用工具箱的调用指令

转自:http://blog.sina.com.cn/s/blog_86186c970102va9g.html Matlab常用工具箱的调用命令 1. 优化工具箱​​ 用途:优化问题 调用命令:在Command Window输入“optimtool”​,其窗口如下 图1 Optimization Tool 2. 神经网络工具箱​ 用途:数据拟合、模式识别和分类…

tomcat起不来的问题已经解决

tomcat 起不来的问题:\apache-tomcat-6.0.10\bin 中startup.bat 起不来&#xff0c;一闪就没了。说明&#xff1a;环境变量没有配置好。解决办法&#xff1a;配置环境变量&#xff1a;JAVA_HOME C:\Program Files\Java\jdk1.6.0_03就可以解决问题了本文转自 yuwenhu 51CTO博客…

js写法【3】

var m[];m[m.length]xx;//相当于push 对Repeat方法提供了8种写法做比较&#xff0c;这一点还是不错的。转载于:https://www.cnblogs.com/baozhu/p/4862242.html

Eclipse设置控制台日志输出位置

1、选择服务器配置 2、设置输出文件路径 转载于:https://www.cnblogs.com/Neil223/p/5759693.html

现代制造工程——第七章(轧制和锻造)

考点基于书本以及PPT的题目 一、轧制 二、锻造

图像边缘梯度的定义

http://blog.csdn.net/u014020344/article/details/50196635

Jquery_JQuery之DataTables强大的表格解决方案

1、DataTables的默认配置 $(document).ready(function() { $(‘#example’).dataTable(); } ); 示例&#xff1a;http://www.guoxk.com/html/DataTables/Zero-configuration.html 2、DataTables的一些基础属性配置 “bPaginate”: true, //翻页功能 “bLengthChange”: true, /…

内存管理1retain和release

Student.h: #import <Foundation/Foundation.h> interface Student : NSObject property int age; //默认会生成一个_age属性 end Student.m: #import "Student.h" implementation Student //synthesize age_age;//xcode4.5中可以不使用synthesise方法&a…

目标检测的图像特征提取之(一)Hog特征提取

Hog特征实质是&#xff1a;梯度的统计信息,即针对边缘作特征提取 意义&#xff1a;目标的表象和形状 转载于zouxy09大神的文章&#xff0c;加上自己些微的理解和应用&#xff01; http://blog.csdn.net/zouxy09/article/details/7929348/ 上述基本讲清楚了&#xff0c;其实…

redis类型[string 、list 、 set 、sorted set 、hash]

1. Keys redis本质上一个key-value db&#xff0c;所以我们首先来看看他的key. 首先key也是字符串类型&#xff0c;但是key中不能包括边界字符&#xff1b;由于key不是binary safe的字符串&#xff0c;所以像"my key"和"mykey\n"这样包含空格和换行的key是…

matlab simulink笔记02——延迟模块delay与单位延迟模块unit delay

延迟模块 单位延迟模块 延迟模块具有复位功能,当满足复位条件时会进行复位操作,即输出的值会恢复到初始值,而单位延迟模块没有复位功能; 延迟模块的步长是可以设置的,而单位延迟模块的步长固定为1,不可以改变

局域网传输速度升级

现在很多单位都建成了企业内部局域网&#xff0c;一般的企业网络大多是使用双 绞线连接网卡的方式来进行通信的。其中双绞线通常采用的都是5类线&#xff0c;传输速率为100MB。而网卡则有一定的区别&#xff0c;很多网卡都是采取 10Mbps/100Mbmps自适应的网卡&#xff0c;即传输…

数据结构--栈 codevs 1107 等价表达式

codevs 1107 等价表达式 2005年NOIP全国联赛提高组 时间限制: 1 s空间限制: 128000 KB题目等级 : 钻石 Diamond题目描述 Description明明进了中学之后&#xff0c;学到了代数表达式。有一天&#xff0c;他碰到一个很麻烦的选择题。这个题目的题干中首先给出了一个代数表达式&am…

目标检测的图像特征提取之(二)LBP特征

LBP特征实质是&#xff1a;图像局部特征的提取 意义&#xff1a;纹理的提取 http://blog.csdn.net/zouxy09/article/details/7929531 1&#xff09;首先将检测窗口划分为1616的小区域&#xff08;cell&#xff09;&#xff1b; &#xff08;2&#xff09;对于每个cell中的一个…

VS2010安装帮助文档出现错误

安装VS2010后的帮助文档安装出现错误:未能在指定文件夹中创建本地存储区 安装完VS2010后&#xff0c;出现错误&#xff0c;取消后 再安装MSDN 打开“Help Library 管理器 - Microsoft Help 查看器 1.0” 提示“请为本地内容选择位置” 默认的位置是在“C:\Documents and Settin…

matlab smulink笔记03——过零检测

★过零检测 变步长解算方法动态地评估计算下一个采样时刻所使用的步长&#xff0c;当前后两个采 样点的状态值变化大时&#xff0c;则缩小采样步长&#xff0c;当前后两个采样点的值变化小时则增大步 这种做法使得解算器在计算不连续临近区域时使用较小的步长&#xff0c;因为不…

电脑下乡的遐想

最近讨论家电下乡的话题很热&#xff0c;其中我个人最关心“电脑下乡”。原因是&#xff0c;我是农村人&#xff0c;正好在电脑相关行业里混。 应当说&#xff0c;让电脑下乡是我多年的梦想&#xff0c;我多么盼望乡下的乡亲们能够上网看新闻、学习、看电视……但是&#xff0c…

angularjs学习曲线

angularjs学习曲线 刚开始学Augular觉得开发应用需要有相当的编程基础. 不得不说这确实是一款了不起的开发框架&#xff0c;它要求开发人员设计低耦合和可维护的应用. 使用AngularJS 的复杂度就像使用PHP&#xff0c;Ruby on Rails等等, 都需要处理依赖注入&#xff0c;路由&am…