从 JSON 解码为自定义对象

Posted

技术标签:

【中文标题】从 JSON 解码为自定义对象【英文标题】:Decode to a custom object from a JSON 【发布时间】:2018-07-10 08:05:42 【问题描述】:

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

let decoder = JSONDecoder()**

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

当我写这个时,我有以下错误

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

所以当我切换到“来自:”时,我有以下错误:

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

当我把从我的请求中获得的数据值转换为 JSON 之前,它工作正常,但是当响应是 JSONArray 时,我不能再这样做了。 感谢您的帮助。

【问题讨论】:

解码函数有参数_ type: _.Type, from: Data 感谢您的回答! 【参考方案1】:

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

“from”参数的数据类型需要是Data,所以需要转换swiftyJsonVar。如果 swiftJsonVar 是 SwiftyJSON 对象,则类似于 let data = try swiftyJsonVar.rawData()

【讨论】:

感谢您的回答!【参考方案2】:

请,请(学习)阅读错误消息。这些都很清楚。

消息的左边是你做错了什么,expected之后的部分是你必须做的。

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

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

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

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

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

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

【讨论】:

非常感谢您的回答!我没有意识到 swiftyJson 是问题所在,而且解析 json 数组就这么容易......再次感谢!

以上是关于从 JSON 解码为自定义对象的主要内容,如果未能解决你的问题,请参考以下文章

当 minifyEnabled 为 true 时,如何将 JSON 字符串转换为自定义对象?

将 pandas 数据框转换为自定义 JSON 格式(然后转换为 JS 对象)

如何在喷雾中将所有拒绝转换为自定义 json?

如何为复杂对象编写自定义 JSON 解码器?

Azure APIM:将 JSON 响应转换为自定义 XML 格式

如何在 JavaScript 中为自定义对象创建方法?