【问题标题】:cannot extract JSON无法提取 JSON
【发布时间】:2018-02-21 18:29:14
【问题描述】:

您好,我正在尝试提取 json。但是我收到一条错误消息Cannot convert value of type 'Data' to expected argument type 'NSData'。有什么我做错了吗?

    success: { (response) -> Void in
        var dataStream: Data = Data.init(referencing: response!)
        do {
        let data = try JSONSerialization.jsonObject(with: dataStream, options: JSONSerialization.ReadingOptions.mutableContainers)as AnyObject
        }catch{
        }
        if let id = response!["money"]as? String {
            print(id)
        }

    }){ (error) -> Void in
        print("error")
    }
}

更新2

let request = Alamofire.request(apiUrl, method: .get)


    request.responseJSON { response in
        switch response.result
        {
        case .success:
            success(response.result.value as AnyObject)
        case .failure(let error):
            failure(error as NSError)
        }
    }
}

【问题讨论】:

  • 我删除了我的答案,因为错误消息似乎具有误导性。初始化器init(referencing 无论如何都是不合适的,因为它从值类型中创建了一个引用类型,这在您的情况下是无用的。我推荐使用 Alamofire 的 .responseJSON 参数返回反序列化的 JSON。
  • 我实际上已经实现了更新 2
  • 试图打印 response.result.value???

标签: ios json alamofire


【解决方案1】:

你的问题来了

var dataStream: Data = Data.init(referencing: response!)

在文档中

init(引用参考:NSData)

response 应该是 NSData 而不是 Data 类型,你可以试试

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

注意转换为预期的返回值,无论是字典还是数组

这个

 if let id = response!["money"]as? String {
        print(id)
    }

应该替换为

  if let id = responseDict!["money"]as? String {
        print(id)
    }

你可以试试AlamofireSwiftyJson

        Alamofire.request("https://yourlinkdownloadjson/abc").responseJSON { response in
            debugPrint(response)

            if let json = response.data {
                let data = JSON(data: json)
                print("data\(data["money"])")

            }
        }

【讨论】:

  • 您好,谢谢您的回答。哪里来的数据!从哪里来?
  • 你用什么来调用网络服务,我的意思是 NSURLConnection 或 NSUrlSession ?
  • 应该是JSONSerialization.jsonObject(with: response, options: .allowFragments)
  • 我正在使用 Alamofire。如果我这样做 jsonObject' 产生 'Any',则不会出现预期的上下文结果类型 'AnyObject' 错误......
  • AnyAnyObject相同
猜你喜欢
  • 2021-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-30
  • 2017-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多