问题在 swift iOS 中检索 json 数据

Posted

技术标签:

【中文标题】问题在 swift iOS 中检索 json 数据【英文标题】:issue retrieve json data in swift iOS 【发布时间】:2016-10-10 07:01:53 【问题描述】:

我遇到无法快速检索 json 数据的问题,我不断收到错误消息

var url = NSURL(string: getDataURL)!
    var data = NSData(contentsOf: url as URL)
    do 
        jsonArray = try JSONSerialization.jsonObject(withData: data, options: .allowFragments)!
    
    catch let error 
    

我正在使用 Objective C,但我想切换到 Swift 语言

【问题讨论】:

让 JSON = 试试 NSJSONSerialization.JSONObjectWithData(validData, options: options) @MikeAlter 我以前试过这个,还是不行 如果do - catch 块中出现错误,您的应用肯定会崩溃。你不能简单地在 catch 部分之后继续。 @vadian 在应用迷恋之前我遇到了错误,我已经尝试了很多代码,但仍然无法为我工作 信息 Swift 3 对于获得正确的签名至关重要。我编辑了标签。 【参考方案1】:

伙计们,请使用代码完成功能找到正确的语法

当您输入JSONSerialization. 时,您会看到

合适的方法是

JSONSerialization.jsonObject(with:data, options: .allowFragments)

或按 ⇧⌘0(零而不是 O)并通过键入或粘贴类在文档中查找方法。每个开发人员都必须能够阅读文档。

除此之外,您必须将反序列化的结果转换为预期的类型

jsonArray = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as! [[String:Any]]

【讨论】:

是的,我之前尝试过,但仍然无法正常工作 基本上这段代码有效。你会得到其他错误。我更新了答案以解决一个问题。 我收到“Ambigouus reference member 'jsonObject(with:options)' 错误 data 是可选的。你需要打开它。顺便说一句,您应该使用新的原生类型:let url = URL(string: getDataURL)! let data = Data(contentsOf: url)! 但是强烈建议您不要使用像 Data(contentsOf: 这样的同步方法,因为它们会阻塞线程。 let data = try Data(contentsOf: url)!并把它放在do块中【参考方案2】:

试试这个代码发送请求并获取数据。

 if let jsonResult = try NSJSONSerialization.JSONObjectWithData(fooData!, options: []) as? NSDictionary
 
        print(jsonResult)
  else
         return failure(NSError)
 

【讨论】:

@YousefAbuSallamah in fooData 传递您的数据 这是 Swift 2,问题是关于 Swift 3。 @HimanshuMoradiya 看来你和 OP 使用的是不同的 Swift 版本。 @vadian xcode 会将代码从 swift 2 替换为 swift 3 @HimanshuMoradiya 添加代码后,我现在收到错误 swift 编译器

以上是关于问题在 swift iOS 中检索 json 数据的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中解析 JSON API [关闭]

IOS swift如何使用返回的Json数据填充我的TableView

Firebase 在 Swift 中检索低于自动 ID 的数据

通过 Swift 在 iPhone (iOS) 开发中存储/检索用户数据(读/写文件)的正确方法是啥?

从firebase实时数据库IOS Swift中检索数据

如何在 Swift 3 中解析来自 URL 的 JSON 数据