文章目录
什么是JSONModel?
- 做移动端开发,解析网络数据是必不可少的工作之一。iOS原生框架很早前就已经提供了将JSON数据直接映射成数组或者字典对象的方法,并且结合KVC,也可以将字典数据直接赋值给对象。但是这种方式十分不灵活,例如如果网络数据中的字段与我们数据模型中的字段不一致,某些网络数据的字段可能为
nil
等等都需要开发者单独的处理。使用JSOMModel
可以十分方便的处理映射过程中的各种情况。
越来越多的移动应用更倾向于用JSON这种数据格式。一旦计划开发移动应用的并有与后台通信的需求,则要用JSON数据格式与服务器通信互相通信
JSONModel
是用Objective-C写的开源库。它包含了接受发送、解析JSON数据,用JSON数据驱动初始化你的类,还能够检验JSON和嵌套模型等功能。
核心数据模型类JSONModel
- 平时在使用
JSOMModel
框架时,往往只会用到JSOMModel
这一个类。JSONModel
框架中最核心的类是JSONModel
类,其中代码大约有1400行。首先,其头文件中声明了几个协议,如下:
@protocol Index
@end
@protocol Ignore
@end
@protocol Optional
@end
- 需要注意,这些协议里面都没有约定任何方法,它们也不会用来实现的,其作为属性的一种标记,例如将属性添加
Ignore
协议,则JSONModel
不会对这个属性进行解析、使用这种方式来进行本地数据的管理,例如:
@interface MyOnject : JSONModel
@property(nonatomic, strong) NSString * firstName;
@property(nonatomic, strong) NSString * lastName;
//这个属性是本地拼接 使用
@property(nonatomic, strong) NSString<Ignore> * fullName;
@end
Optional
协议表示这个属性是可选的,即JSON数据中如果有这个属性就解析,如果没有就跳过。
a. 某些属性值可以为空;
b. 防止由于服务器返回数据为空导致JSONModel
异常(程序崩溃);Index
协议标记这个属性是当前对象的主键,已经弃用。- 有了这3个协议,在声明属性时,我们可以十分容易的设定他们的解析规则,在
JSONModel
中,协议除了可以用来规定解析规则外,还可以用来指定自定义数据类型的解析,只是我们需要自己定义一个协议,名称与自定义类名一致,示例如下:
#import "JSONModel.h"
@protocol Address
@end
@interface Address:JSONModel
@property(nonatomic, strong) NSString * info;
@end
@interface MyObject : JSONModel
@property(nonatomic, strong) NSArray<Address> * address;
@end
- 如上代码所示,在解析数据时,会直接将
address
数组中赋值为Address的对象
JSON的一些基本使用
JSON转化为模型
//JSON
{
"country": "Germany",
"dialCode": 49,
"isInEurope": true
}
//Model
#import "JSONModel.h"
NS_ASSUME_NONNULL_BEGIN
@interface CountryModel : JSONModel
@property (nonatomic, copy) NSString *country;
@property (nonatomic, copy) NSString *dialCode;
@property (nonatomic, assign) BOOL isInEurope;
@end
NS_ASSUME_NONNULL_END
//JSON转换为模型
NSError *error;
CountryModel *countryModel = [[CountryModel alloc] initWithDictionary:dic error:&error];
模型转换为字典
//将模型快速转换为字典
NSDictionary *dict = [countryModel toDictionary];
模型转换为字符串
//将模型快速转换为字符串
NSString *string