jsonModel使用

流弊的JSON数据模型框架

https://github.com/jsonmodel/jsonmodeljavascript

版本 1.3.0


若是你喜欢JSONModel,而且使用了它,请你:java

  • star一下git

  • 给我一些反馈. 多谢!github


 
JSONModel for iOS and OSX

JSONModel 是一个可以快速巧妙的建立数据模型的库. 你能够在 iOS or OSX APP中使用它.json

JSONModel 自动检查JOSN模型和结构体, 完全的减小你的代码量.api

 
 

添加JSONModel到你的项目中

要求

  • 支持持ARC; iOS 5.0+ / OSX 10.7+
  • SystemConfiguration.framework

as: 1) 源文件

1.下载JSONModel.zip文件
2.将它拷贝到你的项目中
3.导入SystemConfiguration.framework框架ruby

or 2)使用 CocoaPods

pod 'JSONModel' 

若是你想关于CocoaPods了解更多,请参考这个简单的教程.bash

or 3) 使用 Carthage

在你的项目的Cartfile添加JSONModel:app

github "jsonmodel/jsonmodel" 

文档

你能够查看在线阅读文档: http://cocoadocs.org/docsets/JSONModel框架


基本使用

涉想你的JSON数据像这样:

{ "id": "10", "country": "Germany", "dialCode": 49, "isInEurope": true } 
  • 为你的数据模型建立一个Objective-C的类,继承自JSONModel.
  • 将JSON中的keys在.h文件中声明为属性:
#import "JSONModel.h" @interface CountryModel : JSONModel @property (assign, nonatomic) int id; @property (strong, nonatomic) NSString* country; @property (strong, nonatomic) NSString* dialCode; @property (assign, nonatomic) BOOL isInEurope; @end 

在.m文件中不须要作任何事情.

  • 用数据初始化你的model:
#import "CountryModel.h" ... NSString* json = (fetch here JSON from Internet) ... NSError* err = nil; CountryModel* country = [[CountryModel alloc] initWithString:json error:&err]; 

若是传过来的JSON合法,你所定义的全部的属性都会与该JSON的值想对应,甚至JSONModel会尝试去转换数据为你指望的类型,如上所示:

  • 转换id,从字符串转换为int
  • 只须要拷贝一下country的值
  • 转换diaCode,从number转换为字符串
  • 最后一个是将isInEurope转换为BOOL属性

因此,你所须要作的就是将你的属性定义为指望的类型.


在线教程

官方网站: http://www.jsonmodel.com

在线文档: http://jsonmodel.com/docs/

傻瓜教程:


举个栗子

命名自动匹配

{
  "id": "123", "name": "Product name", "price": 12.95 } 
@interface ProductModel : JSONModel @property (assign, nonatomic) int id; @property (strong, nonatomic) NSString* name; @property (assign, nonatomic) float price; @end @implementation ProductModel @end 

模型嵌套 (模型包含其余模型)

{
  "order_id": 104, "total_price": 13.45, "product" : { "id": "123", "name": "Product name", "price": 12.95 } } @interface OrderModel : JSONModel @property (assign, nonatomic) int order_id; @property (assign, nonatomic) float total_price; @property (strong, nonatomic) ProductModel* product; @end @implementation OrderModel @end 

模型集合

{
  "order_id": 104, "total_price": 103.45, "products" : [ { "id": "123", "name": "Product #1", "price": 12.95 }, { "id": "137", "name": "Product #2", "price": 82.95 } ] } 
@protocol ProductModel @end 
@interface ProductModel : JSONModel @property (assign, nonatomic) int id; @property (strong, nonatomic) NSString* name; @property (assign, nonatomic) float price; @end @implementation ProductModel @end @interface OrderModel : JSONModel @property (assign, nonatomic) int order_id; @property (assign, nonatomic) float total_price; @property (strong, nonatomic) NSArray<ProductModel>* products; @end @implementation OrderModel @end 

注意: 尖括号后 <code>NSArray</code> 包含一个协议. 这跟Objective-C原生的泛型不是一个概念. 他们不会冲突, 但对于JSONModel来讲,协议必须在一个地方声明.

key映射

{
  "order_id": 104, "order_details" : [ { "name": "Product#1", "price": { "usd": 12.95 } } ] } @interface OrderModel : JSONModel @property (assign, nonatomic) int id; @property (assign, nonatomic) float price; @property (strong, nonatomic) NSString* productName; @end @implementation OrderModel +(JSONKeyMapper*)keyMapper { return [[JSONKeyMapper alloc] initWithDictionary:@{ @"order_id": @"id", @"order_details.name": @"productName", @"order_details.price.usd": @"price" }]; } @end 

设置全局键映射(应用于全部model)

[JSONModel setGlobalKeyMapper:[
    [JSONKeyMapper alloc] initWithDictionary:@{
      @"item_id":@"ID", @"item.name": @"itemName" }] ]; 

设置下划线自动转驼峰

{
  "order_id": 104, "order_product" : @"Product#1", "order_price" : 12.95 } 
@interface OrderModel : JSONModel @property (assign, nonatomic) int orderId; @property (assign, nonatomic) float orderPrice; @property (strong, nonatomic) NSString* orderProduct; @end @implementation OrderModel +(JSONKeyMapper*)keyMapper { return [JSONKeyMapper mapperFromUnderscoreCaseToCamelCase]; } @end 

可选属性 (就是说这个属性能够为null或者为空)

{
  "id": "123", "name": null, "price": 12.95 } 
@interface ProductModel : JSONModel @property (assign, nonatomic) int id; @property (strong, nonatomic) NSString<Optional>* name; @property (assign, nonatomic) float price; @property (strong, nonatomic) NSNumber<Optional>* uuid; @end @implementation ProductModel @end 

忽略属性 (就是彻底忽略这个属性)

{
  "id": "123", "name": null } 
@interface ProductModel : JSONModel @property (assign, nonatomic) int id; @property (strong, nonatomic) NSString<Ignore>* customProperty; @end @implementation ProductModel @end 

设置全部的属性为可选(全部属性值能够为空)

@implementation ProductModel +(BOOL)propertyIsOptional:(NSString*)propertyName { return YES; } @end 

使用JSONModel自带的 HTTP 请求

//add extra headers [[JSONHTTPClient requestHeaders] setValue:@"MySecret" forKey:@"AuthorizationToken"]; //make post, get requests [JSONHTTPClient postJSONFromURLWithString:@"http://mydomain.com/api" params:@{@"postParam1":@"value1"} completion:^(id json, JSONModelError *err) { //check err, process json ... }]; 

将model转化为字典或者json格式的字符串

ProductModel* pm = [[ProductModel alloc] initWithString:jsonString error:nil]; pm.name = @"Changed Name"; //convert to dictionary NSDictionary* dict = [pm toDictionary]; //convert to text NSString* string = [pm toJSONString]; 

自定义数据的转换

@implementation JSONValueTransformer (CustomTransformer) - (NSDate *)NSDateFromNSString:(NSString*)string { NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:APIDateFormat]; return [formatter dateFromString:string]; } - (NSString *)JSONObjectFromNSDate:(NSDate *)date { NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:APIDateFormat]; return [formatter stringFromDate:date]; } @end 

自定义处理指定的属性

@interface ProductModel : JSONModel @property (assign, nonatomic) int id; @property (strong, nonatomic) NSString* name; @property (assign, nonatomic) float price; @property (strong, nonatomic) NSLocale *locale; @end @implementation ProductModel // Convert and assign the locale property - (void)setLocaleWithNSString:(NSString*)string { self.locale = [NSLocale localeWithLocaleIdentifier:string]; } - (NSString *)JSONObjectForLocale { return self.locale.localeIdentifier; } @end 

自定义JSON校验

@interface ProductModel : JSONModel @property (assign, nonatomic) int id; @property (strong, nonatomic) NSString* name; @property (assign, nonatomic) float price; @property (strong, nonatomic) NSLocale *locale; @property (strong, nonatomic) NSNumber <Ignore> *minNameLength; @end @implementation ProductModel - (BOOL)validate:(NSError *__autoreleasing *)error { BOOL valid = [super validate:error]; if (self.name.length < self.minNameLength.integerValue) { *error = [NSError errorWithDomain:@"me.mycompany.com" code:1 userInfo:nil]; valid = NO; } return valid; } @end 
  • 错误处理
  • 自定义数据校验
  • 自动比较和相等判断
  • 更多.
相关文章
相关标签/搜索