我正在解析 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 响应 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章