【发布时间】:2020-01-14 00:40:10
【问题描述】:
我将收到一个带有对象数组的 JSON 格式的 API 响应。例如,
{
"Header": "Verification",
"Info": [
{
"mobile": "**** **** 123"
},
{
"email": "s******k**@g***.com"
}
],
}
我使用了 Codable 功能并创建了一个如下所示的结构,
struct cResponse: Codable
{
var Header: String?
var Info: [Info]
}
struct Info: Codable {
var mobile: String!
var email: String!
}
我正在尝试使用 JSONDecoder 快速解码 JSON 响应,如下面的代码,
let decoder = JSONDecoder()
let decodedcRES: cResponse = try decoder.decode(cResponse.self, from: CData)
在来自服务器的信息仅是移动设备和电子邮件之前,这一切正常。
但 Info 在运行时将是动态的(即)我将在 Info 下从服务器接收更多 JSON 对象。因此,如果我创建一个如下所示的结构,
struct cResponse: Codable
{
var Header: String?
var Info: [String]
}
我收到“无法读取数据,因为它的格式不正确。”作为错误。
如何使用 Codable 功能快速处理动态 JSON 数组对象?
【问题讨论】:
-
Info 是对象数组,不是字符串数组
-
而不是
error.localizedDescription打印error实例。它准确地告诉你出了什么问题。并且永远永远不会在将使用Decodable解码的结构中声明成员作为隐式展开可选。并且名称属性和变量总是小写以避免潜在的命名空间冲突