• JSONModel的基本使用


    JSONModel 是一个库,它能智能并且快速的创建出数据 model,你可以在你的 iOS 项目或者 OSX 项目上使用它。

    使用前准备

    添加 JSONModel 到你的工程中

    1、需要的环境:

    • ARC,iOS 5.0+ / OSX 10.7 +
    • 引入框架SystemConfiguration.framework

    2、获取途径:

      1)、通过源文件获取
      * 下载 JSONModel zip包
      *  将 JSONModel 文件夹拷贝到你的工程项目中
      *  将库 SystemConfiguration.framework 添加上         
      2)、使用 Cocoa pods 来安装:
          pod 'JSONModel'
    

    3、源码的文档:

    源码本身包含了类的文档,你可以自己编译后导入到你的Xcode中:

    • 如果你还没安装 appledoc ,先安装 appledoc
    • 在Xcode上键入 appledoc 安装文档,在根目录下
    • 重启Xcode

    基本使用

    假设你的 JSON 串像下面这样子:

    {"id":"10", "country":"Germany", "dialCode": 49, "isInEurope":true}
    
    • 创建一个你自己的类,并继承至 JSONModel
    • 在你的头文件里面进行声明你所需要的 JSON key值
    #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 属性的值
    • 转换 dialCode ,从NSNumber 转换为 NSString 值
    • 最后一个呢是将 isInEurope 转换成 BOOL 的属性

    所以,你需要做的就是定义出你期望的属性就行了。

    例子

    命名自动匹配

    {
      "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
    

    model中含有其他的model

    {
      "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
    

    model中含有其他model的集合

    {
      "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
    

    键值转回匹配

    {
      "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
    

    设置全局的键值转回匹配

    [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
    

    可以为空的属性值

    {
      "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
    

    将集合元素转换成 model

    {
      "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, ConvertOnDemand>* products;
    
    @end
    
    @implementation OrderModel
    
    @end
    
  • 相关阅读:
    遍历MapControl中的图层方法总结
    ArcEngine加载SDE图层
    C#+ArcEngine 新建点元素
    sql日期查询问题
    MSSQL 将截断字符串或二进制数据
    gridview的Rowcommand命令中获取行索引的方法总结
    利用ArcGIS Engine、VS .NET和Windows控件开发GIS应用
    ArcGIS Server开发示例诠释
    将ASP.NET MVC 2.0 部署在IIS6
    [OpenCV+C#]开发环境的搭建
  • 原文地址:https://www.cnblogs.com/iyou/p/4861666.html
Copyright © 2020-2023  润新知