【iOS】JSONModel的基本使用

本文详细介绍了如何使用JSONModel库在iOS开发中解析复杂的JSON数据,包括模型转换、可选属性设置、嵌套数据处理及自定义字段映射等。通过示例代码展示了从JSON到模型的转化过程,解决因服务器数据为空导致的崩溃问题,并给出了应对ATS安全策略的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是JSONModel?

  • 做移动端开发,解析网络数据是必不可少的工作之一。iOS原生框架很早前就已经提供了将JSON数据直接映射成数组或者字典对象的方法,并且结合KVC,也可以将字典数据直接赋值给对象。但是这种方式十分不灵活,例如如果网络数据中的字段与我们数据模型中的字段不一致,某些网络数据的字段可能为nil等等都需要开发者单独的处理。使用JSOMModel可以十分方便的处理映射过程中的各种情况。

越来越多的移动应用更倾向于用JSON这种数据格式。一旦计划开发移动应用的并有与后台通信的需求,则要用JSON数据格式与服务器通信互相通信

  • JSONModel是用Objective-C写的开源库。它包含了接受发送解析JSON数据,用JSON数据驱动初始化你的类,还能够检验JSON和嵌套模型等功能。

核心数据模型类JSONModel

  • 平时在使用JSOMModel框架时,往往只会用到JSOMModel这一个类。JSONModel框架中最核心的类是JSONModel类,其中代码大约有1400行。首先,其头文件中声明了几个协议,如下:
@protocol Index
@end
@protocol Ignore
@end
@protocol Optional
@end
  • 需要注意,这些协议里面都没有约定任何方法,它们也不会用来实现的,其作为属性的一种标记,例如将属性添加Ignore协议,则JSONModel不会对这个属性进行解析、使用这种方式来进行本地数据的管理,例如:
@interface MyOnject : JSONModel

@property(nonatomic, strong) NSString * firstName;

@property(nonatomic, strong) NSString * lastName;
//这个属性是本地拼接 使用
@property(nonatomic, strong) NSString<Ignore> * fullName;

@end
  • Optional协议表示这个属性是可选的,即JSON数据中如果有这个属性就解析,如果没有就跳过。
    a. 某些属性值可以为空;
    b. 防止由于服务器返回数据为空导致JSONModel异常(程序崩溃);
  • Index协议标记这个属性是当前对象的主键,已经弃用
  • 有了这3个协议,在声明属性时,我们可以十分容易的设定他们的解析规则,在JSONModel中,协议除了可以用来规定解析规则外,还可以用来指定自定义数据类型的解析,只是我们需要自己定义一个协议,名称与自定义类名一致,示例如下:
#import "JSONModel.h"

@protocol Address
@end


@interface Address:JSONModel

@property(nonatomic, strong) NSString * info;

@end


@interface MyObject : JSONModel

@property(nonatomic, strong) NSArray<Address> * address;

@end
  • 如上代码所示,在解析数据时,会直接将address数组中赋值为Address的对象

JSON的一些基本使用

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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值