从JSON解码为自定义对象

时间:2018-07-10 08:05:42

标签: json swift xcode decode swifty-json

我正在尝试从JSON解码(我将swiftyJSON和Alamofire用于我的HTTP请求)。 swiftyJsonVar是我的JSON对象

let decoder = JSONDecoder()**

let user = try! decoder.decode([User.self], for:(swiftyJsonVar))**

写此代码时,我出现以下错误

  

调用中的参数标签不正确(具有':for:',预期为':from:'

因此,当我从“”切换到“”时,出现以下错误:

  

无法将'JSON'类型的值转换为预期的参数类型'Data'*“

当我将从请求中获取的数据值转换为JSON之前,它工作正常,但是当响应为JSONArray时,我将无法再执行此操作。 谢谢您的帮助。

2 个答案:

答案 0 :(得分:0)

错误“无法将类型'JSON'的值转换为预期的参数类型'数据'”明确指出了问题所在。

“ from”参数的数据类型必须为Data,因此您需要转换swiftyJsonVar。如果swiftJsonVar是SwiftyJSON对象,则类似let data = try swiftyJsonVar.rawData()

答案 1 :(得分:0)

请,请(学习)阅读错误消息。这些非常清晰。

消息的端是您做错了,期望之后的部分是您必须做的。

  

“调用中的参数标签不正确(具有':for:',预期为':from:'”

是什么意思?您编写了, for:,但是正确的语法是, from:。甚至还有一个 fix 按钮。

  

“无法将类型'JSON'的值转换为预期的参数类型'数据'”

是什么意思?您传递了JSON类型,但正确的类型是Data

忘记SwiftyJSON并将接收到的原始数据传递给解码器并捕获可能的错误。另一个错误是Type参数。如果期望一个 User,请写User.self,如果期望数组,请写[User].self

do {
    let decoder = JSONDecoder()
    let user = try decoder.decode([User].self, from: data)
} catch { print(error) }