我正在解析 JSON 响应 [关闭]

Posted

技术标签:

【中文标题】我正在解析 JSON 响应 [关闭]【英文标题】:I am working on parsing a JSON response [closed] 【发布时间】:2017-05-16 18:39:44 【问题描述】:

我正在解析 JSON 响应,我需要从关键 FILES 中获取数据,但代码不起作用

 do 
        let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as! [String : AnyObject]
        if let name = json["LIBRARY"] as? [[String : AnyObject]]
            if let files = name["FILES"] as? [[String : AnyObject]]
                for file in files 
                    var info = Modal()
                   info.audioUrl = file["SRC"] as? String
                   print(info.audioUrl)
                   self.modals.append(info)
                 
            
        
 catch let error 
   print(error)

【问题讨论】:

【参考方案1】:

我认为在您的代码中 name 是一个数组,因此要获取 files 实例,您应该将代码替换为:

if let namesArray = json["LIBRARY"] as? [[String : AnyObject]]
    for name in namesArray 
        if let filesArray = name["FILES"] as? [[String : AnyObject]] 
            for file in filesArray 
                print(file["SRC"])
                    
        
    

【讨论】:

这是无效的。 name 是一个数组。 name["FILES"] 对数组无效。 @rmaddy 我知道但有人编辑了我的原始帖子(检查版本历史)我恢复了我的帖子的第一个版本。您能否删除取消投票或向我解释有什么问题?不是我的错。 :) 那个人的编辑很糟糕。您回滚的答案要好得多。虽然如果 name 是一个空数组,你的代码会崩溃。 @sbarow 您对此答案所做的编辑完全错误。请不要这样编辑别人的答案。 @rmaddy 我再次编辑了答案。它不应该崩溃。【参考方案2】:

首先,在 Swift 3 中,标准 JSON 字典是 [String:Any]

由于键 LIBRARY 的值是(正确解析的)数组,因此您必须通过索引为数组下标

if let library = json["LIBRARY"] as? [[String : Any]], !library.isEmpty 
   if let files = library[0]["FILES"] as? [[String : Any]] 

而且——和往常一样——.mutableContainers 在 Swift 中完全没有意义,省略参数,

【讨论】:

谢谢!!!你的回答很有帮助。 如果SRC中有很多url? 根据不可能的 JSON,files 可以是多个项目,但涵盖了您的代码。 @programmer 当库数组为空时,此代码将崩溃。检查我的回答我已经解决了这个错误并且还处理了多个文件。 @KamilHarasimowicz 如果库数组为空,这段代码肯定不会崩溃。

以上是关于我正在解析 JSON 响应 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

JSON解析错了吗? [关闭]

使用 Alamofire 解析字典中的 json 对象 [关闭]

如何在自定义表格视图中解析 JSON 响应 [关闭]

在 Android 中发送和解析 JSON 对象 [关闭]

解析 Alamofire json 响应

Json 解析 Swift 3 Alamofire