iOS JSONModel使用

JSONModel是json转model的第三方开源库。当我们向服务器发送一个请求之后,通过JSONModel把数据转成model就可以很方便我们使用了。

pod 'JSONModel'

基本使用方式

例如这一json数据

{
   "first" : 1,
   "second": 2,
   "third" : 3,
   "fourth": 4
}

我们定义如下模型.m中可以不做任何处理

#import <JSONModel/JSONModel.h>

@interface OneModel : JSONModel

@property (nonatomic,assign)int     first;
@property (nonatomic,assign)double  second;
@property (nonatomic,assign)float   third;
@property (nonatomic,copy)NSString* fourth;

@end

从json数据中我们可以看出,服务器给我们的数据类型都是一致的,而我们定义的数据模型中有int、double、float、NSString这4种,我们不需要做任何处理,JSONModel会帮我们自动转换。

JSONValueTransformer类中有如下支持的转换

NSMutableString <-> NSString
NSMutableArray <-> NSArray
NS(Mutable)Array <- JSONModelArray
NSMutableDictionary <-> NSDictionary
NSSet <-> NSArray
BOOL <-> number/string
string <-> number
string <-> url
string <-> time zone
string <-> date
number <-> date
  1. 使用JSONModel时,不需要额外去检查所要的服务器属性是否有返回。JSONModel的initWithDictionary方法会自动去进行检查并处理。

  2. 有效性检查,如果指定的服务器返回的某个字段没有返回,而且又是必须的, 像下面这样写,则会抛出异常。

//this property is required
@property (nonatomic,copy) NSString* fourth;
因为默认这个值是必须的。

一般情况下,我们不想因为服务器的某个值没有返回(nil)就使程序崩溃, 我们会加关键字Optional。像这样

@property (nonatomic,copy) NSString<Optional>* fourth;

如果不想每一条属性都添加,我们也可以在.m文件中重写方法

+(BOOL)propertyIsOptional:(NSString *)propertyName{
        return  YES;
}

使用如下方法给model赋值

//假设responseObject[@"data"]是服务器返回给我们的数据
OneModel *model = [[OneModel alloc]initWithDictionary:responseObject[@"data"] error:nil];

对获得的model我们可以通过如下方法把它转成字典

-(NSDictionary*)toDictionary;

模型嵌套

#import <JSONModel/JSONModel.h>
#import "TwoModel.h"

@interface OneModel : JSONModel

@property (nonatomic,assign)int     first;
@property (nonatomic,assign)double  second;
@property (nonatomic,assign)float   third;
@property (nonatomic,copy)NSString* fourth;
@property (nonatomic,strong)TwoModel* twoModel;

@end

模型结合

#import <JSONModel/JSONModel.h>

@protocol OneModel//注意要加上这句
@end
@interface OneModel : JSONModel

@property (nonatomic,assign)int     first;
@property (nonatomic,assign)double  second;
@property (nonatomic,assign)float   third;
@property (nonatomic,copy)NSString<Optional>* fourth;

@end

@interface ThreeModel : JSONModel

@property (nonatomic,assign)NSString<Optional>* id;
@property (nonatomic,strong)NSArray<OneModel,Optional>* one;

@end
#import "OneModel.h"

@implementation OneModel
@end

@implementation ThreeModel
@end

在此附上他人更详尽的讲解

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,982评论 19 139
  • 前言 如今基本都是客户端请求服务器的模式,数据传递方式基本都使用JSON的字符串方式。然而当我们获取了服务器发来的...
    Alibsolute阅读 5,233评论 6 4
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,251评论 4 61
  • 06:21
    妙手_e126阅读 146评论 0 0
  • 一场红尘恋,一份千年缘, 几缕隔岸相思,隐逸了多少楼台旧梦? 在水一方,愿着一身荷香,乘一叶兰舟, 划过秦时明月,...
    布尔乔亚阅读 212评论 0 0