NSJSONSerialization和NSNull

时间:2014-07-31 22:00:27

标签: objective-c json nsdictionary null nsnull

偶尔我会遇到类似“'data':null”的JSON结构。 NSJSONSerialization将这些转变为NSNull,说实话,这很烦人。

我理解这背后的原因 - 像NSDictionary这样的东西不能包含零值。

这很好,但在这些情况下,我宁愿看到反序列化数据结构中缺少的元素,在许多情况下实际上简化了处理。是否有可以传递给NSJSONSerialization的选项或配置,并要求它做到这一点 - 只是错过了反序列化数据结构中的那些nil?

2 个答案:

答案 0 :(得分:3)

我不相信这是可能的。您可以传递给课程的选项不提及类似的内容,并且课程的开头说明All objects are instances of NSString, NSNumber, NSArray, NSDictionary, or NSNull.

但是,这可以用于您的优势。如果您通过CRUD类型的web api更新对象的本地实例,则JSON中可能根本不会传递空选项。但是,如果您需要在当前设置为值的本地实例上使用nil-ify属性,如果服务器在JSON中将attr设置为null,则可以轻松检查JSONSerialized对象是否将该attr设置为NSNull,如果它丢失,你就无法在那里。

您最好的选择是,如果您控制生成JSON的端点,则根本不设置attr。

tl; dr" no。"

答案 1 :(得分:0)

不,你不能这样做,因为缺席(读取:“未定义”)值和明确定义的null值之间存在语义差异。

虽然一些(很多?)JSON API可能无法区分,但这通常是不可取的: 如果您作为API提供者使用缺少属性来在您的消费者方面执行删除,则需要您始终在回复中发送完整的实体。

如果您的实体具有许多属性,并且您还有更多属性,则这会对您必须向客户提升的数据量产生巨大影响。

此外,如果您引入了一个错误,使得其中一个属性暂时丢失,那么您开始使用您提供服务的每个请求弄乱消费者的客户端数据......

另外,自己过滤null是相当直接的......

相关问题