iOS 三种处理JSON中null问题方法

背景:
服务返回的数据有可能会出现,key:null 这种情形. 对于这种情况,提供三种思路处理. 同时欢迎提供其它更合适的方式处理

  • 1.如果使用AFN框架可以 removesKeysWithNullValues
  • 2.无论离散或者集约型网络请求,应该存在一个统一的返回 response 的地方, 可以在此集中处理,简化的代码可能如下
// 1. 接受到服务返回的 response
// 2. 序列化
// 3. 清除json中的null - 避免[NSNull null]导致的crash
json = [JSONUtils JSONObjectWithoutNull:json];

其中 JSONObjectWithoutNull: 的方法实现可以参考 JSONUtils

  • 3.可以参考 NullSafe ,早在12年就已经给出的解决方案>_<.

NuffSafe原理:
简单点说,当我们给一个NSNull对象发送消息的话,可能会崩溃(null是有内存的),而发送给nil的话,是不会崩溃的。
作者就是使用了这么一个原理,把发送给NSNull的而NSNull又无法处理的消息经过如下几步处理:
1.创建一个方法缓存,这个缓存会缓存项目中类的所有类名。
2.遍历缓存,寻找是否已经有可以执行此方法的类。
3.如果有的话,返回这个NSMethodSignature。
4.如果没有的话,返回nil,接下来会走forwardInvocation:方法。
5.[invocation invokeWithTarget:nil];将消息转发给nil。
那么,如何判断NSNull无法处理这个消息呢,在OC中,系统如果对某个实例发送消息之后,它(及其父类)无法处理(比如,没有这个方法等),系统就会发送methodSignatureForSelector消息,如果这个方法返回非空,那么就去执行返回的方法,如果为nil,则发送forwardInvocation消息。
这样就完成整个转发链了。
以上参考: NullSafe 的原理是什么?

最后, 希望这些对你有所帮助

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,824评论 0 9
  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 3,399评论 0 6
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,067评论 19 139
  • 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的...
    西木阅读 30,661评论 33 466
  • 忽然对周遭的事物失去信心 像坠入深渊的孤鸟 例如爱,例如友谊 我无从感知它们的真实 像一个短暂而惶惶的梦 你深知它...
    南心北木mua阅读 509评论 0 2