美文网首页专注iOS开发iOS DeveloperiOS开发
iOS 三种处理JSON中null问题方法

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

作者: singlestep | 来源:发表于2017-03-15 15:15 被阅读114次

    背景:
    服务返回的数据有可能会出现,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 的原理是什么?

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

    相关文章

      网友评论

        本文标题:iOS 三种处理JSON中null问题方法

        本文链接:https://www.haomeiwen.com/subject/tmilnttx.html