【问题标题】:getting error while grabing JSON in swift3 [duplicate]在 swift 3 中抓取 JSON 时出错 [重复]
【发布时间】:2024-01-04 02:26:01
【问题描述】:
class Get {

class func JSON(url:String,callback:@escaping (NSDictionary)->()) {
    requestJSON(url: url,callback: callback)
}

class func requestJSON(url:String,callback:@escaping (NSDictionary)->()) {
    var nsURL = NSURL(string: url)
    let task = URLSession.shared.dataTask(with: nsURL as! URL) {
        (data,response,error) in
        var error:NSError?

        var response = JSONSerialization.JSONObjectWithData(data, options: JSONSerialization.ReadingOptions.MutableContainers, error: &error) as NSDictionary
        callback(response)
    }
    task.resume()
}
}

在此行中出现错误“var response = JSONSerialization.JSONObjectWithData(data, options: JSONSerialization.ReadingOptions.MutableContainers, error: &error) as NSDictionary”作为调用中的额外参数“错误”

please help me in sorting this error or please suggest me link for grabing JSON library.thanks in advance.

【问题讨论】:

  • 尝试从您的响应调用中删除 'error: &error'。
  • @dylanthelion 感谢您在我删除时回复我收到此错误“调用可以抛出但它没有标记为'try'并且错误未处理”
  • 这意味着 JSONObjectWithData: 抛出,需要放在 try 块中。我认为您需要找到您正在使用的方法的更新示例。 JSON 序列化已使用 Swift 3 进行了更新。您使用的是几年前有效的实现,但基本上已被弃用,
  • @dylanthelion 先生,您能帮我解决这个问题吗?我必须提前通过tomato.tanks 显示我们项目的最终输出。
  • 不幸的是,我太忙了,无法直接回答您,但谷歌搜索“swift jsonobjectwithdata”并过滤到上个月,给了我这个:raywenderlich.com/150322/swift-json-tutorial-2 和这个:*.com/questions/42242535/…。试试这些,如果它们不起作用,请尝试过滤过去一个月的搜索。您使用的是旧方法,只需要更新即可。

标签: json swift swift3 swift2 getjson


【解决方案1】:

您应该将方法包含在 try...catch 块中。

只需替换这两行

var response = JSONSerialization.JSONObjectWithData(data, options: JSONSerialization.ReadingOptions.MutableContainers, error: &error) as NSDictionary
        callback(response)

do{
    let jsonObject = try JSONSerialization.jsonObject(with: data, options: .mutableContainers)
    if let response = jsonObject as? NSDictionary{
        callback(response)
    }
}
catch{
    print(error)
}

你也可以这样做

if let response = (try? JSONSerialization.jsonObject(with: data, options: .mutableContainers)) as? NSDictionary{
    callback(response)
}

【讨论】:

  • 兄弟 tanq 这么多.....问题已经解决了爱你这么多.....