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

JSONModel的基本使用相关推荐

  1. HTTPPost/AFNetWorking/JSONModel/NSPredicate

    一.HTTPPost================================================ 1. POST方式发送请求 HTTP协议下默认数据发送请求方法是GET方式,若需要 ...

  2. JSONModel - 字符串换转实体类

     JSONModel https://github.com/icanzilb/JSONModel/ 一. 获取属性的元数据 const char *attrs = property_getAttrib ...

  3. 【OC】JSONModel基本使用

    JSONModel是一个库,让我们能快速创建智能数据模型. 基本使用 假设我有这样一个JSON数据 {"country":"Germany","dia ...

  4. java解析多层json,手把手教你怎么解析多层嵌套的JSON数据(使用JSONModel)

    2018.11.14日更新 前言 没想到这篇简单介绍JSONModel的文章竟然已经破了两千阅读量,一跃成为我阅读量最高的文章,作为iOS小白的我感到万分惶恐 在这一个月的项目中,总是用到JSONMo ...

  5. iOS——JSONModel数据解析

    文章目录 JSONModel数据解析 关于JSONModel 准备JSONModel 前置工作 JSONModel的基本用法 基础用法 第一步创建一个继承于JSONModel的类 第二步使用网络请求到 ...

  6. 第5月第8天 jsonmodel

    1. @implementation JSONValueTransformer (CustomTransformer)//时间戳转NSDate - (NSDate *)NSDateFromNSStri ...

  7. How is jsonModel.getProperty implemented

    Created by Wang, Jerry, last modified on Jul 11, 2015 要获取更多Jerry的原创文章,请关注公众号"汪子熙":

  8. when will the ABindings be filled for json.JSONModel in SAP UI5

    Created by Wang, Jerry, last modified on May 20, 2015 要获取更多Jerry的原创文章,请关注公众号"汪子熙":

  9. model存储 swift_使用Swift原生JSON-Model

    使用例子代码: 1.服务器返回的json: let json = """ {"userInfos": [{"age": 18,&q ...

最新文章

  1. 森林病虫防治系统 (二.2)
  2. QTP 11 补丁大全
  3. [译] 用 Shadow DOM v1 和 Custom Elements v1 实现一个原生 Web Component
  4. P2101-命运石之门的选择【dp,离散化】
  5. python 列表推导式
  6. DataWorks支持PyODPS类型任务
  7. Mendix入局中国低代码,开发者们你准备好了吗
  8. 快速搭建Nextcloud+OnlyOffice私有云办公平台
  9. m031开发 新唐_M031
  10. 【ElasticSearch】Es 源码之 IngestService 源码解读
  11. 数据库常用的锁有哪些?
  12. [日常] nginx与负载均衡
  13. 记录——《C Primer Plus (第五版)》第十章编程练习第十二题
  14. The eighteen day
  15. 职场达人教你怎么删除pdf空白页
  16. 关于win10优化问题
  17. 各地级市-国内及外汇旅游收入(1995-2020)
  18. 循迹避障小车制作第一篇(tb6612模块与降压模块的使用)
  19. 微信小程序上传代码, Error: 分包大小超过限制,main package source size 4732KB exceed max limit 2MB
  20. JNCIS-SP学习指南卷1 第一章:协议无关的路由

热门文章

  1. Base64算法的编程使用
  2. org.apache.hadoop.hbase.ClockOutOfSyncException
  3. 使用NumPy优于Python列表的优势
  4. Memcached----2-3
  5. 魏桥集团创始人张士平去世,他是如何成为山东首富的?
  6. mysql unix_timestamp 格式化_FROM_UNIXTIME 格式化MYSQL时间戳函数_MySQL
  7. java自我介绍_JAVA面试技巧之自我介绍
  8. java 堆内存分析_JVM内存堆布局图解分析
  9. 局域网限速软件_2号破解app重器推荐一款强大的快捷软件
  10. C语言和JAVA可以互相转换吗,求助大神!!!JAVA转换成C语言