JsonMode json嵌套解析
2016-05-19 17:56
411 查看
上一片文章:iOS Json转Model
(一)中提及了jsonModel这个开源库:这里介绍一下它的(嵌套解析)用法。
以下是从服务器获得的数据:
1.首先声明一个继承自JSONModel的基类:
//.h
#import "JSONModel.h"
@interface BaseModel :
JSONModel
@end
//.m
@implementation BaseModel
/**用于将服务器传过来的以下划线字段转化为模型的驼峰类型:比如上面的available_predeposit, 但模型中我们的字段如果我们写为(通常我们都这么写)availablePredeposit,如果不重写该函数则availablePredeposit就无法赋值*/
+ (JSONKeyMapper *)keyMapper {
return [JSONKeyMapper
mapperFromUnderscoreCaseToCamelCase];
}
/**声明模型中的字段可以存在或不存在服务器的字段,
否则模型不会被赋值,比如说下面的Model中如果有字段code1,如果没这样重写这个方法,这整个model就不会被赋值,解析的结果是nil。
*/
+ (BOOL)propertyIsOptional:(NSString *)propertyName {
return
YES;
}
@end
二、我们发现数据的根字段有:info、code以及data三个字段,而data下又有member字段,member下又有不可分割的字段
所以我们需要声明三个模型
模型 1
@interface Model : BaseModel
@property (nonatomic,
strong) DataModel *data; //注意字段“data”必须和服务器的字段相同,不能写成data1或其他的
@property (nonatomic,
copy) NSString *info; //
@property (nonatomic,
assign) NSInteger code;
@end
模型 2
@interface DataModel :
BaseModel
@property (nonatomic,
strong) MemberModel *member;
@end
模型 3
@interface MemberModel :
BaseModel
@property (nonatomic,
copy) NSString *points;
@property (nonatomic,
copy) NSString *mobile;
@property (nonatomic,
copy) NSString *nick;
@property (nonatomic,
copy) NSString *id;
@property (nonatomic,
copy) NSString *avatar;
@property (nonatomic,
copy) NSString *name;
@property (nonatomic,
copy) NSString *availablePredeposit;
@end
三、使用方法:
Model *model = [[Model
alloc] initWithDictionary:dataDic
error:nil]; //这里的dataDic就是从服务器放回的数据
然后mode中的所有字段都被赋值了,然后你需要name的时候,mode.data.member.name就可以,是不是既方便又结构清晰。
(一)中提及了jsonModel这个开源库:这里介绍一下它的(嵌套解析)用法。
以下是从服务器获得的数据:
1.首先声明一个继承自JSONModel的基类:
//.h
#import "JSONModel.h"
@interface BaseModel :
JSONModel
@end
//.m
@implementation BaseModel
/**用于将服务器传过来的以下划线字段转化为模型的驼峰类型:比如上面的available_predeposit, 但模型中我们的字段如果我们写为(通常我们都这么写)availablePredeposit,如果不重写该函数则availablePredeposit就无法赋值*/
+ (JSONKeyMapper *)keyMapper {
return [JSONKeyMapper
mapperFromUnderscoreCaseToCamelCase];
}
/**声明模型中的字段可以存在或不存在服务器的字段,
否则模型不会被赋值,比如说下面的Model中如果有字段code1,如果没这样重写这个方法,这整个model就不会被赋值,解析的结果是nil。
*/
+ (BOOL)propertyIsOptional:(NSString *)propertyName {
return
YES;
}
@end
二、我们发现数据的根字段有:info、code以及data三个字段,而data下又有member字段,member下又有不可分割的字段
所以我们需要声明三个模型
模型 1
@interface Model : BaseModel
@property (nonatomic,
strong) DataModel *data; //注意字段“data”必须和服务器的字段相同,不能写成data1或其他的
@property (nonatomic,
copy) NSString *info; //
@property (nonatomic,
assign) NSInteger code;
@end
模型 2
@interface DataModel :
BaseModel
@property (nonatomic,
strong) MemberModel *member;
@end
模型 3
@interface MemberModel :
BaseModel
@property (nonatomic,
copy) NSString *points;
@property (nonatomic,
copy) NSString *mobile;
@property (nonatomic,
copy) NSString *nick;
@property (nonatomic,
copy) NSString *id;
@property (nonatomic,
copy) NSString *avatar;
@property (nonatomic,
copy) NSString *name;
@property (nonatomic,
copy) NSString *availablePredeposit;
@end
三、使用方法:
Model *model = [[Model
alloc] initWithDictionary:dataDic
error:nil]; //这里的dataDic就是从服务器放回的数据
然后mode中的所有字段都被赋值了,然后你需要name的时候,mode.data.member.name就可以,是不是既方便又结构清晰。
相关文章推荐
- jsp页面div浮动弹出
- js 中 foreach循环(for in)中,最后会多出一个值
- 关于js的时间对象常用方法
- iframe使用方法之:用js操纵iframe里面的元素
- javascript递归函数的正确写法
- 常用JavaScript 框架比较
- js基础和数据操作
- 你必须知道的Javascript 系列
- IOS5中的Safari不兼容Javascript中的Date问题,做下笔录吧!
- JS技巧
- 原生js代码实现秒表效果
- rapidjson的read和write的sample
- fastJson
- JavaScript笛卡尔积超简单的实现
- 一个js引发的血案
- javascript onkeydown事件
- js获取网页的各种高度和宽度
- HTML特殊字符的html、js、css写法汇总
- 获取项目路径 js
- 常用js方法