10. Key mapping, 有时, 得到的数据不是在一个层级,如下:
11. 全局Global key mapping. (使所有的模型都具备), 个人觉得这个并不是非常通用,因为如果真是需要所有模型都具备这个keyMapper的转换,则直接继承一个基类就行了。
[JSONModel setGlobalKeyMapper:[
[JSONKeyMapper alloc] initWithDictionary:@{
@"item_id":@"ID",51); margin-top:0px; margin-bottom:0px; font-size:13px; font-family:Menlo"> @"item.name":@"itemName"
}]
];
12.
自动把下划线方式的命名转为驼峰命名
属性。还有类似的,如大写转为小写的
方法:
mapperFromUpperCaseToLowerCase
"order_product":@"Product#1",26)"> "order_price": 12.95
生成的模型
@interfaceOrderModel :JSONModel
)intorderId;
)floatorderPrice;
)NSString* orderProduct;
return[JSONKeyMappermapperFromUnderscoreCaseToCamelCase];
13. 可选属性,建议尽量使用这种方式来避免异常。
"id":"123",
"name": null,51); margin-top:0px; margin-bottom:0px; font-size:13px; font-family:Menlo"> "price": 12.95
生成的模型如下:
@interfaceProductModel :JSONModel
)NSString<Optional>* name;
)NSNumber<Optional>* uuid;
@implementationProductModel
通过上面的optional的方式, 我们可以给这个类添加一个isSuccess方法,该方法中判断name和uuid是否存在来决定是否从服务器成功取数据。 而不是把这两个属性设置为required,可以有效避免异常。
14. Ignore属性, 会使得解析时会完全忽略它。 一般情况下,忽略的属性主要用在该值不从服务器获取,而是通过后面的代码进行设置。
"name": null
模型为:
)intid;
nonatomic)NSString<Ignore>* customProperty;
可以用下面方法,使当前类的全部属性都为可选,官网上说尽量避免这样的使用, (个人觉得官网的意思是指,尽量避免用来面方法来指定所有的属性为可选,即使要全部属性为可选,也尽量是在每个属性那里标注为Optional)
@implementationProductModel
+(BOOL)propertyIsOptional:(NSString*)propertyName
{
returnYES;
}
15. 延迟加载, 这种比较推荐,可以减少在网络读取时的性能消耗:关键字为: ConvertOnDemand
"total_price": 103.45,26)"> "products": [
{
"id":"123",51); margin-top:0px; margin-bottom:0px; font-size:13px; font-family:Menlo"> "name":"Product #1",51); margin-top:0px; margin-bottom:0px; font-size:13px; font-family:Menlo"> "price": 12.95
},51); margin-top:0px; margin-bottom:0px; font-size:13px; font-family:Menlo"> "id":"137",51); margin-top:0px; margin-bottom:0px; font-size:13px; font-family:Menlo"> "name":"Product #2",51); margin-top:0px; margin-bottom:0px; font-size:13px; font-family:Menlo"> "price": 82.95
}
]
使用模型:
@protocolProductModel
)NSString* name;
)intorder_id;
)floattotal_price;
@property(strong,nonatomic)NSArray<ProductModel,ConvertOnDemand>* products;
@implementationOrderModel
16. 使用JSONHttpClient进行请求。
//add extra headers
[[JSONHTTPClient requestHeaders] setValue:@"MySecret"forKey:@"AuthorizationToken"];
//make post,get requests
[JSONHTTPClient postJSONFromURLWithString:@"http://mydomain.com/api"
params:@{@"postParam1":@"value1"}
completion:^(idjson,JSONModelError *err) {
//check err,process json ...
}];
好了, 所以的JSONModel的使用方法都已经在这里了, 综合了官网的使用方法。