设为首页 加入收藏

TOP

iOS JsonModel 的使用(一)
2017-10-13 10:17:06 】 浏览:6062
Tags:iOS JsonModel 使用

 

本文转自:http://blog.csdn.net/smking/article/details/40432287

 

下面讲一下JSONModel的使用方法。 

@inteface MyModel : JSONModel

 

1. 使用JSONModel时,不需要额外去检查所要的服务器属性是否有返回。JSONModel的initWithDictionary方法会自动去进行检查并处理。

 

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

 

//this property is required

@property (strong, nonatomic) NSString* string;

因为默认这个值是必须的。

 

 

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

 

//this one's optional

@property (strong, nonatomic) NSNumber<Optional>* number;

 

 

3. 原子数据, 之前可能是如下面这样操作数据

 

if (jsonDict[@"name"])

labelName.text = jsonDict[@"name"];

else

[self showErrorMessageAndBailout];

 

这段代码会使得jsonDict[@"name"], 会被读取,然后进行有效性判断,最后再被使用。 换句话来说,这里使用了三次, 而如果某些情况下,使用一次就已经出错,但却无法阻止它接下来的连续出错。

 

而如果使用JSONModel的属性,则只会保证上面只使用一次,就可以进行有效性的判断以及使用。(其实上面也可以做到,只需要把这个值取出来,存下来接着使用却可,但是代码会稍显麻烦)

同时读取一批数据如下面代码:

简单模型如下:

 

SimpleModel* model = [[SimpleModel alloc] initWithString:@"...json here..." error:nil];

 

 

 
 

复杂模型如下, 这里假设复杂模型包含了简单模型。主要是为了说明模型之前的包含情况下,照样可以进行解析。

 

 
 

SuperComplicatedModel* model = [[SuperComplicatedModel alloc] initWithString:@"...json here..." error:nil];

 

模型的批处理,即一次可以处理一批模型。

 

 

 
 

NSArray* models = [SuperComplicatedModel arrayOfObjectsFromDictionaries: jsonDatas error:nil];

 

 

 

4. 数据转换, OC <-> JSON

注意下面这张图:这意味着JSON的数据格式只有中间的部分, string,number, array, object, 以及null

例如有如下 JSON数据:

 

 
 

{

   "first" : 1,

   "second": 35,

   "third" : 10034,

   "fourth": 10000

}

 

可以如下定义这个模型

 

 

 
 

@interface NumbersModel:JSONModel

 

@property (assign,nonatomic) short first;

@property (assign,nonatomic) double second;

@property (strong,nonatomic) NSNumber* third;

@property (strong,nonatomic) NSString* fourth;

 

@end

注:JSON数据中, first为1,second为35, 但是它们却可以自动被转换成short, double类型。 对于10034, 以及10000会自动转换为NSNumber以及NSString。 这些都是JSONModel会自动进行的。 神奇吧!

 

 

5. 内嵌的数据转换, 在JSONValueTransformer类中,有各种内嵌的转换支持。如下面

 

{

    "purchaseDate" : "2012-11-26T10:00:01+02:00",

    "blogURL" : "http://www.touch-code-magazine.com"

}

 

分别是一个 日期类型,以及一个URL类型。

 

@interface SmartModel: JSONModel

 

@property (strong, nonatomic) NSDate* purchaseDate;

@property (strong, nonatomic) NSURL* blogUrl;

 

@end

 

 
 

用上面这个模型,不需要其它代码,即可以得到想要的转换 。

 

这个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

 

6. 自定义数据转换, 显然上面的内嵌转换有时不能

首页 上一页 1 2 3 4 5 下一页 尾页 1/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇iOS开发之—— 各种加密的使用(M.. 下一篇IOS 友盟使用详解

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目