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

快速的解析数据为 Model 模型,支持层级嵌套 Model 模型解析,指定类型自动转化,无需手动解析,一行代码搞定!

基本使用方法

假设请求到的 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

如果传过来的 JSON 合法,你所定义的所有的属性都会与该 JSON 值相匹配,并且 JSONModel 也会尝试尽可能的转换成你所想要的数据,就像上面的例子:

  • 转化 “id”,从字符串转换成 int 型
  • 拷贝 country 属性的值
  • 转换 dialCode ,从NSNumber 转换为NSString 值
  • 最后一个是将 isInEurope 转换成 BOOL 的属性

将Model导出字典或JOSN字符串

TestModel *data = [[TestModel alloc] initWithData:data error:nil];
//以字典形式导出
NSDictionary* dict = [data toDictionary];
 
//以字符串形式导出
NSString* string = [data toJSONString];

集合、嵌套型数据

响应实例:

{
    "date":"20211011",
    "stories":[
        {
            "image_hue":"0x555555",
            "title":"出现低落焦虑时,怎么分辨是「短暂情绪」还是生病了?",
            "url":"https:\/\/daily.zhihu.com\/story\/9741137",
            "hint":"精神科医生宋崇升 · 4 分钟阅读",
            "ga_prefix":"101107",
            "images":[
                "https:\/\/pic3.zhimg.com\/v2-e68e99fafc8f87cd3c91a17a6f835d1f.jpg?source=8673f162"
            ],
            "type":0,
            "id":9741137
        },
        Object{...},
        Object{...},
        Object{...},
        Object{...},
        Object{...}
    ],
    "top_stories":[
        {
            "image_hue":"0xb38d51",
            "hint":"作者 \/ 男爵兔",
            "url":"https:\/\/daily.zhihu.com\/story\/9741077",
            "image":"https:\/\/pica.zhimg.com\/v2-ca0fe2412807776234bf0019f7276541.jpg?source=8673f162",
            "title":"2021 年诺贝尔文学奖授予小说家阿卜杜勒拉扎克·古尔纳,他是谁?",
            "ga_prefix":"100807",
            "type":0,
            "id":9741077
        },
        Object{...},
        Object{...},
        Object{...},
        Object{...}
    ]
}

这次的数据很复杂他有嵌套, 有数组,我们应该怎样处理这种嵌套模型呢?我们对每一个要嵌套的都写成一个类,但并不需要写成多个类文件,而是只需要在一个类文件里把该有的写好就行:

@protocol StoriesModel
@end

@protocol Top_StoriesModel
@end

#import "JSONModel.h"

NS_ASSUME_NONNULL_BEGIN

@interface StoriesModel : JSONModel
@property (nonatomic, copy) NSString *url;
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *ga_prefix;
@property (nonatomic, copy) NSString *type;
@property (nonatomic, copy) NSString *image_hue;
@property (nonatomic, copy) NSArray *images;
@property (nonatomic, copy) NSString *id;
@end

@interface Top_StoriesModel : JSONModel
@property (nonatomic, copy) NSString *url;
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *ga_prefix;
@property (nonatomic, copy) NSString *type;
@property (nonatomic, copy) NSString *image_hue;
@property (nonatomic, copy) NSString *image;
@property (nonatomic, copy) NSString *id;
@end

@interface TestModel : JSONModel
@property (nonatomic, copy) NSString *date;
@property (nonatomic, copy) NSArray<StoriesModel> *stories;
@property (nonatomic, copy) NSArray<Top_StoriesModel> *top_stories;

@end

NS_ASSUME_NONNULL_END

在.m文件中,需要:

#import "TestModel.h"

@implementation Top_StoriesModel
//+ (BOOL)propertyIsOptional:(NSString *)propertyName 作用是不想因为服务器的某个值没有返回(nil)就使程序崩溃, 可以加关键字Optional,如果不想每一条属性都添加,也可以在.m文件中重写方法
+ (BOOL)propertyIsOptional:(NSString *)propertyName {
    return YES;
}
@end

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

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

其他

自动把下划线方式的命名转为驼峰命名属性:
请添加图片描述

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-10-12 23:34:18  更:2021-10-12 23:34:43 
 
开发: 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 23:28:01-

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