从 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 对象)