JSONModel使用总结

@interface JSONModel :NSObject <AbstractJSONModelProtocol>

/创建一个新的模型实例,并初始化它的JSON文本参数使用UTF8编码

-(instancetype)initWithString:(Nsstring*)string error:(JSONModelError**)err;

//创建一个新的模型实例,并初始化它的JSON文本参数使用给定的编码

-(instancetype)initWithString:(Nsstring *)string usingEncoding:(nsstringencoding)encoding error:(JSONModelError**)err;

// required协议方法,通过字典实例化模型

-(instancetype)initWithDictionary:(NSDictionary*)dict error:(NSError **)err;

// 讲模型内容导出到字典

-(NSDictionary*)toDictionary;

// 导出所有模型到json数据,并返回

-(Nsstring*)toJSONString;

// 讲装有字典的数组一次实例化对应的模型存在数组里

+(NSMutableArray*)arrayOfModelsFromDictionaries:(NSArray*)array;

// 将装有模型的数组中模型数据转为字典存入数组

+(NSMutableArray*)arrayOfDictionariesFromModels:(NSArray*)array;


-(Nsstring*)indexPropertyName;

-(BOOL)isEqual:(id)object;

-(NSComparisonResult)compare:(id)object;

-(BOOL)validate:(NSError**)error;

//如果你的属性名称不匹配你的JSON模型关键的名字

+(JSONKeyMapper*)keyMapper;

+(void)setGlobalKeyMapper:(JSONKeyMapper*)globalKeyMapper;

// 如果Model中有多余的属性,不用考虑;

+(BOOL)propertyIsOptional:(Nsstring*)propertyName;

+(BOOL)propertyIsIgnored:(Nsstring*)propertyName;



@interface JSONKeyMapper :NSObject

// toModel将JSON键名转换为模型属性名 toJSON将模型属性名转换为一个JSON键

-(instancetype)initWithJSONToModelBlock:(JSONModelKeyMapBlock)toModel

modelToJSONBlock:(JSONModelKeyMapBlock)toJSON;


// 创建一个JSONKeyMapper实例,基于您提供的映射,在映射参数。使用JSON键名称作为键,你的JSONModel属性名称作为值。{ @“crazy_JSON_name”:@“myCamelCaseName”}

-(instancetype)initWithDictionary:(NSDictionary*)map;

// 讲下划线转换为驼峰命名方式

+(instancetype)mapperFromUnderscoreCasetoCamelCase;

下面两段代码都可以实现匹配

+(JSONKeyMapper*)keyMapper2 {

NSDictionary *dict =@{

@"address" :@"address",

@"author.header_img" :@"authorHeaderImage",

@"author.uid" :@"authorUserId",

@"author.username" :@"authorauthorUsername",

@"city" :@"city",

@"city_id" :@"cityId",

@"cover_img" :@"coverImg",

};

JSONKeyMapper *mapper = [[JSONKeyMapperalloc] initWithDictionary:dict];

return dict;

}

// 重写了影射规律

+(JSONKeyMapper*)keyMapper {

/* 注意JuhuiModel里面需要映射2种类型

1. 驼峰Camel命名规范

2. author.header_imgauthor_username要映射到JuhuiModel直接字段里面 */

JSONKeyMapper *mapper = [JSONKeyMappermapperFromUnderscoreCasetoCamelCase];

// 取得影射的blocks对象

JSONModelKeyMapBlock modelBlock = mapper.modelToJSONKeyBlock;

// 根据上述的重新创建映射条件

JSONKeyMapper *newMapper = [[JSONKeyMapperalloc] initWithJSONToModelBlock:nilmodelToJSONBlock:^Nsstring *(Nsstring *keyName) {

// 告诉我们映射规律

if ([keyNameisEqualToString:@"authorHeaderImage"]) {

return@"author.header_img";

} elseif ([keyName isEqualToString:@"authorUsername"]) {

return@"author.username";

} elseif ([keyName isEqualToString:@"authorUserId"]) {

return@"author.uid";

} elseif ([keyName isEqualToString:@"coverImage"]) {

return@"cover_img";

} elseif ([keyName isEqualToString:@"desc"]) {

return@"descript";

}

return modelBlock(keyName);

}];

return newMapper;

}

另外,使用时创建Model继承jsonmodel,根据项目中需求,在model中重写jsonModel的方法

相关文章

AJAX是一种基于JavaScript和XML的技术,能够使网页实现异步交...
在网页开发中,我们常常需要通过Ajax从后端获取数据并在页面...
在前端开发中,经常需要循环JSON对象数组进行数据操作。使用...
AJAX(Asynchronous JavaScript and XML)是一种用于创建 We...
AJAX技术被广泛应用于现代Web开发,它可以在无需重新加载页面...
Ajax是一种通过JavaScript和HTTP请求交互的技术,可以实现无...