【发布时间】:2018-04-10 11:28:31
【问题描述】:
我有以下数据结构:
{
"type": "foo"
"data": { /* foo object */ }
}
这是我的解码类:
final public class UntypedObject: Decodable {
public var data: Data
enum UntypedObjectKeys: CodingKey {
case data
}
required public init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: UntypedObjectKeys.self)
self.data = try values.decode(Data.self, forKey: .data)
}
}
我正在获取此类对象的数组,这就是我对其进行解码的方式:
let decoder = JSONDecoder()
let objectList = try decoder.decode([UntypedObject].self, from: data)
但是我在控制台中收到此错误:
typeMismatch(Swift.Array, Swift.DecodingError.Context(codingPath: [Foundation.(_JSONKey in _12768CA107A31EF2DCE034FD75B541C9)(stringValue: "Index 0", intValue: Optional(0)), Playground_Sources.UntypedObject.UntypedObjectKeys.data], debugDescription: "期望解码 Array 但找到了字典。",底层错误: nil))
所以问题是是否有可能将正确的 JSON 对象解码为 Data 类型属性,如果是,我该如何实现?
【问题讨论】:
-
请向我们展示您的 JSON 输入数据。根据您收到的错误(即,“应解码 Array 但找到了 Dictionary。”)您的 JSON 格式可能不是您所期望的。
-
@PauloMattos - 这就是重点。我希望将“数据”键下的所有内容解码为
Data。不管是dict、数组、数字还是字符串。 -
您想要
”data"键下的原始数据,无论格式如何?如果是这样,看起来很棘手...... ;) -
是的,纯字节。
-
您不能在 json 字符串中发送纯数据。您将需要使用 base64 编码。除此之外,如果您没有提供有效的 json 以用作您的问题的参考,那将无法提供帮助。