偶尔我会遇到像“'data': null”这样的 JSON 结构。NSJSONSerialization 把它们变成了 NSNull,说实话,这很烦人。
我理解这背后的原因 - 像 NSDictionary 这样的东西不能包含 nil 值。
这很好,但是在这些情况下,我宁愿看到反序列化数据结构中缺少的元素,这在许多情况下实际上简化了处理。是否有可以传递给 NSJSONSerialization 的选项或配置,并要求它完全做到这一点 - 只是错过反序列化数据结构中的那些 nil 吗?
偶尔我会遇到像“'data': null”这样的 JSON 结构。NSJSONSerialization 把它们变成了 NSNull,说实话,这很烦人。
我理解这背后的原因 - 像 NSDictionary 这样的东西不能包含 nil 值。
这很好,但是在这些情况下,我宁愿看到反序列化数据结构中缺少的元素,这在许多情况下实际上简化了处理。是否有可以传递给 NSJSONSerialization 的选项或配置,并要求它完全做到这一点 - 只是错过反序列化数据结构中的那些 nil 吗?
我不相信这是可能的。您可以传递给课程的选项没有提到类似的内容,并且课程简介All objects are instances of NSString, NSNumber, NSArray, NSDictionary, or NSNull.
但是,这可以用于您的优势。如果您通过 CRUD 类型的 Web api 更新对象的本地实例,则可能根本不会在 JSON 中传递空选项。但是,如果您需要对当前设置为某个值的本地实例上的属性进行 nil-ify,如果服务器在 JSON 中将该属性设置为 null,您可以轻松检查 JSONSerialized 对象是否将该属性设置为NSNull,如果它丢失了,你就不能。
如果您控制生成 JSON 的端点,最好的选择就是根本不设置 attr。
tl;博士“不”。
不,你不能那样做,因为缺失(读作:“未定义”)值和明确定义的值之间存在语义差异null
。
虽然一些(很多?)JSON API 可能不会做出这种区分,但这通常是不可取的:如果您作为 API 提供者使用缺少属性在您的消费者端执行删除,这要求您始终在您的回应。
如果您的实体有许多属性,并且您有更多属性,这可能会对您必须提升给客户的数据量产生相当大的影响。
此外,如果您引入了一个错误,导致这些属性之一暂时丢失,您就会开始在您为他们提供的每个请求中弄乱消费者的客户端数据……</p>
此外,自己过滤掉null
s 也相当简单……</p>