Json在objective-c中解析nil字段

Posted

技术标签:

【中文标题】Json在objective-c中解析nil字段【英文标题】:Json parsing nil field in objective-c 【发布时间】:2013-07-22 19:43:23 【问题描述】:

我在将 JSON 映射到基础对象时遇到问题...

当 JSON 字符串不包含该键时,有什么方法可以将“nil”值放入类成员变量?

例如,这是我的 DataModel 类:

@interface DataModel : JSONModel

@property (strong, nonatomic) NSString* Status;
@property (strong, nonatomic) NSString* ErrorCode;

@property (strong, nonatomic) ClientModel* Client;

@end

该类用于解析 ClientModel 对象中有关客户端的一些信息,并具有 ErrorCode & Status 字段。

状态字段可以包含“Ok”或“Error”。这里没问题。下一个字段是一个错误代码,以防 json 包含“错误”作为状态。

问题是服务器不会总是向我发送 ErrorCode 的键值(当状态为“Ok”时,服务器 API 不会发送 ErrorCode 键值)。

考虑到我无法修改服务器发送的JSON,当JSON字符串不包含它时,如何解析我的模态对象中接收到的JSON字符串并将“nil”作为ErrorCode值?

是否有任何图书馆允许我们这样做?我目前正在使用 JSONModel,但是当缺少键时,它会给我一个“传入数据无效”错误。我知道 Jackson API for java 处理这种情况,但我不知道在 Objective-C 中是否有类似的东西。如果我可以使用 NSJSONSerialization 解决问题,我也会很高兴听到它。

谢谢!

【问题讨论】:

如何填充模型?您是否从NSDictionary 中提取值? 【参考方案1】:

看起来 JSONModel 声明了a protocol called "Optional",它正是为此用途而设计的。将 JSON 中可能不存在的属性声明为符合此协议,以使初始化程序不会出错:

@property (strong, nonatomic) NSString<Optional> * ErrorCode;

【讨论】:

谢谢乔希!再简单不过了。另一个问题,我如何将该协议应用于 NSArray? Xcode 将其混淆为类名,因为它具有相同的字符 '' ! 我不确定你的意思。无论是什么类,属性声明都应该是一样的:@property (strong, nonatomic) NSArray&lt;Optional&gt; * baubles; 其实,等等!我刚刚再次阅读了这里的小教程:touch-code-magazine.com/JSONModel/#cascade... 如何将 协议添加到此属性? @property (strong, nonatomic) NSArray* tweets; 多个协议都在尖括号之间,用逗号分隔:@property (strong, nonatomic) NSArray&lt;Optional, TweetModel&gt;* tweets; 原始属性会发生什么?例如@property (assign) BOOL isPlaying;

以上是关于Json在objective-c中解析nil字段的主要内容,如果未能解决你的问题,请参考以下文章

尝试在objective-c中从objects[0]插入nil对象

在objective-c中有效解析单元素JSON

在 IOS(Objective-C)中有效地解析 JSON 到 Realm DB

在 iOS Objective-C 中使用 JSON 数据创建动态表单

如何在 Objective-C iOS 中解析 JSON

在 Swift 中使用 nil 值解析 JSON