JsonMode json嵌套解析

本文介绍了如何使用JsonModel库进行JSON数据的嵌套解析。通过创建继承自JSONModel的基类,重写keyMapper和propertyIsOptional方法,以及为不同层级的数据创建对应的模型类,实现了对服务器返回的复杂数据结构进行解析。示例中展示了Model、DataModel和MemberModel三个类的定义,以及如何使用initWithDictionary: error:方法进行实例化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一片文章: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就可以, 是不是既方便又结构清晰。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值