ios - 包含 NSNull* 的 NSDictionary

标签 ios objective-c

我正在编写一个代码来通过以下方式解析 json 响应:

 NSDictionary* jsonArray = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
 if (jsonArray == nil) {
            // returns empty array
            return layouts;
 }
 NSDictionary* sections = [jsonArray valueForKey:@"section"];
 for (NSDictionary* section in sections) {

不幸的是,“部分”有时是空的,我最终得到的部分是一个 __NSArrayI * 其中包含一个元素 - NSNull * 。这会导致 for 循环失败并出现异常。我该如何解决?

最佳答案

我曾经在 NSDictionary 扩展上有一个清理方法来帮助我解决这个问题。基本上,该方法遍历字典中的所有键并删除与 NSNull() 匹配的任何值,返回一个“干净”的字典和数组。诀窍在于您还必须通过嵌套字典进行递归。所以,在伪代码中,它看起来像这样:

func cleanup() -> NSDictionary {
    let newDictionary = NSDictionary()
    for key in dictionary.copy {
        if dictionary[key] is NSDictionary {
            newDictionary[key] = dictionary[key].cleanup()
        } else if dictionary[key] is NSArray {
            newDictionary[key] = dictionary[key].filter( $0 != NSNull() )
        } else if dictionary[key] !=  NSNull() {
            newDictionary[key] = dictionary[key]
        }
    return newDictionary
}

希望这对您有所帮助!

关于ios - 包含 NSNull* 的 NSDictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35463496/

相关文章:

ios - 可以从共享点 url 运行 WKWebView 吗?

iphone - 如何使用NSScanner解析.ics文件

c# - 当表的数据源动态变化时更新 Xamarin iOS 中的 UITableView

ios - 以编程方式检测ios中的蓝色闪烁状态栏

objective-c - Objective-C 中的调解器模式 : Controller objects to perform calculations etc.

iphone - 为什么 Apple 开发站点上的这段代码示例为同一个类声明了三个接口(interface)?

ios - iOS、Core Data应用中的错误通信

ios - 如何使用 objective-c 格式化从 youtube api v3 reuqest 返回的持续时间?

ios - iMessage 应用程序视频消息音量不起作用

ios - 使用 urlsession 下载文件