IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> iOS——JSONModel -> 正文阅读

[移动开发]iOS——JSONModel

简介——什么是JSONModel

首先我们要了解JSONModel并学会如何使用JSONModel我们就必须要知道JSONModel到底是什么:JSONModel是快速方便的把JSON数据转化为ObjectiveC的数据类型,是json转model的第三方开源库。当我们向服务器发送一个请求之后,通过JSONModel把数据转成model中的属性就可以很方便的供给我们使用了。

使用方法

首先我们知道JSONModel是第三方开源库,我们要用第三方库的话就先添加一个第三库,如何添加第三方库具体看这篇:iOS安装CocoaPods详细过程

JSON转化为模型

//JSON
{    "country": "Germany",
    "dialCode": 49,
    "isInEurope": true
 }
//Model
#import "JSONModel.h"

NS_ASSUME_NONNULL_BEGIN

@interface CountryModel : JSONModel

@property (nonatomic, copy) NSString *country;
@property (nonatomic, copy) NSString *dialCode;

@property (nonatomic, assign) BOOL isInEurope;

@end

NS_ASSUME_NONNULL_END
//JSON转换为模型
NSError *error;
CountryModel *countryModel = [[CountryModel alloc] initWithDictionary:dic error:&error];

模型转化为字典

//将模型快速转换为字典
NSDictionary *dict = [countryModel toDictionary];

模型转化为字符串

//将模型快速转换为字符串
NSString *string = [countryModel toJSONString];

嵌套模型的数据解析

我们知道在发送网络请求后会出现模型套模型的情况,那这时我们应该如何去解析数据呢,简单的来说我们可以对每一个要嵌套的都写成一个类,但这并不是说要写成多个类文件,而是将所有的写到一个类文件中。比如:

//JSON
"orderId": 104,
"totalPrice": 13.45,
"product": {
"id": 123,
"name": "Product name",
"price": 12.95
}
//Model
//.h
#import "JSONModel.h"

NS_ASSUME_NONNULL_BEGIN

@interface ProductModel : JSONModel

@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *id;

@property (nonatomic, assign) float price;

@end

@interface OtherModel : JSONModel

@property (nonatomic, assign) NSInteger orderId;
@property (nonatomic, assign) float totalPrice;

@property (nonatomic, strong) ProductModel *product;

@end

NS_ASSUME_NONNULL_END
//.m
#import "ProductModel.h"

@implementation ProductModel

@end

@implementation OtherModel

@end
//模型套模型的例子
NSDictionary *dic = @{
                      @"orderId": @(104),
                      @"totalPrice": @(13.45),
                      @"product": @{
                          @"id": @(123),
                          @"name": @"Product name",
                          @"price": @(12.95)
                      }
                      };

NSError *error;
OtherModel *model = [[OtherModel alloc] initWithDictionary:dic error:&error];


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

//JSON
{
  "id": "123",
  "name": null,
  "price": 12.95
}
//Model
@interface ProductModel : JSONModel

@property (nonatomic, copy) NSString <Optional>*name;
@property (nonatomic, copy) NSString *id;

@property (nonatomic, assign) float price;

@property (strong, nonatomic) NSNumber<Optional>* uuid;

@end
//可选属性(就是说这个属性可以为null或者为空)
NSDictionary *dic = @{
                      @"id": @"123",
                      @"name": [NSNull null],
                      @"price": @(12.95)
                      };

NSError *error;
ProductModel *model = [[ProductModel alloc] initWithDictionary:dic error:&error];

设置所有的属性为可选(所有属性值可以为空)

@implementation ProductModel
+(BOOL)propertyIsOptional:(NSString*)propertyName
{
  return YES;
}
@end
  1. Model 的所有属性值可以为空;
  2. . 防止由于服务器数据返回空导致JSONModel异常(程序崩溃)
  3. 官方建议尽量避免使用该方法(即使要全部属性为可选,也尽量是在每个属性那里标注为Optional);

设置下划线自动转驼峰

//JSON
{
  "order_id": 104,
  "order_product" : @"Product#1",
  "order_price" : 12.95
}
//Model
//.h
#import "JSONModel.h"

NS_ASSUME_NONNULL_BEGIN

@interface OrderModel : JSONModel

@property (assign, nonatomic) int orderId;
@property (assign, nonatomic) float orderPrice;
@property (strong, nonatomic) NSString* orderProduct;

@end

NS_ASSUME_NONNULL_END
//.m
+(JSONKeyMapper*)keyMapper
{
    return [JSONKeyMapper mapperForSnakeCase];
}
//设置下划线自动转驼峰
NSDictionary *dic = @{
    @"order_id": @(104),
    @"order_product" : @"Product#1",
    @"order_price" : @(12.95)
    };

NSError *error;
OrderModel *model = [[OrderModel alloc] initWithDictionary:dic error:&error];


  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-10-15 11:54:32  更:2021-10-15 11:55:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:48:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码