JSONModel的基本使用
2015-10-08 17:39
691 查看
JSONModel 是一个库,它能智能并且快速的创建出数据 model,你可以在你的 iOS 项目或者 OSX 项目上使用它。
引入框架SystemConfiguration.framework
如果你还没安装 appledoc ,先安装 appledoc
在Xcode上键入 appledoc 安装文档,在根目录下
重启Xcode
创建一个你自己的类,并继承至 JSONModel
在你的头文件里面进行声明你所需要的 JSON key值
.m文件中你不需要做其他的事情了.
初始化你的 model ,如下所示:
如果传过来的 JSON 合法,你所定义的所有的属性都会与该 JSON 值相匹配,并且 JSONModel 也会尝试尽可能的转换成你所想要的数据,就像上面的例子:
转化 "id",从字符串转换成 int 型
拷贝 country 属性的值
转换 dialCode ,从NSNumber 转换为 NSString 值
最后一个呢是将 isInEurope 转换成 BOOL 的属性
所以,你需要做的就是定义出你期望的属性就行了。
使用前准备
添加 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
相关文章推荐
- 选择排序---直接选择排序算法(Javascript版)
- 插入排序---希尔插入排序算法(Javascript版)
- 插入排序---直接插入排序算法(Javascript版)
- leetcode题目:Word Pattern (Javascript版)
- JSP学习总结
- javascript事件冒泡
- 前台json的获取方法
- javascript 获取链接url我一些位置的内容
- AJax json
- html5shiv.js让IE浏览器支持HTML5标准
- 创建JavaScript对象的方法(前端面试)
- javascript运动功能-分享到
- js判断鼠标位置是否在某个div中
- Ajax通过jsonp实现跨域访问,访问成功但走error不走success
- js-对象prototype属性剖析
- js复制剪切应该很简单
- javascript小知识点
- javascript弹窗和对话框
- 151008:javascript不明白的地方
- Javascript学习笔记