嘿,伙计们,我对解码有问题。我有一个Json,看起来像这样:
"data": [
[
DoubleValue,
DoubleValue,
DoubleValue,
DoubleValue,
DoubleValue,
"",
""
],
[
DoubleValue,
DoubleValue,
DoubleValue,
DoubleValue,
DoubleValue,
"",
""
],
[
DoubleValue,
DoubleValue,
DoubleValue,
DoubleValue,
DoubleValue,
"",
""
]
]因此,我的建议是创建一个let数据,其中包含一个[Any],但这将不能用于可编码和[Double],因为如果该值为空,则api将向我发送空字符串,我将得到一个typeMismatch错误。
有人建议如何解决这个问题吗?
我现在的可编码
public struct JsonData: Codable {
var data: [[Double?]] = []
enum JsonDataCodingKey: String, CodingKey {
case data
}
public init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: JsonDataCodingKey.self)
var nestedContainer = try container.nestedUnkeyedContainer(forKey: .data)
while !nestedContainer.isAtEnd {
var innerContainer = try nestedContainer.nestedUnkeyedContainer()
var dataSet: [Double?] = []
while !innerContainer.isAtEnd {
let value = try innerContainer.decodeIfPresent(Double.self)
dataSet.append(value)
}
data.append(dataSet)
}
}}
但是,使用这段代码,如果空字符串出现的话,我就会遇到typeMismatch这个问题。
希望有人能帮忙:)
发布于 2018-03-26 14:44:04
您可以选择一个enum,它可以解码为Double或String,并解码其中的数组。
另一种选择是捕获typeMismatch错误并继续进行:
var dataSet = [Double]()
while !innerContainer.isAtEnd {
do {
dataSet.append(try innerContainer.decode(Double.self))
} catch DecodingError.typeMismatch {
// Throw away the value by decoding something which doesn't actually decode.
struct Empty : Codable {}
let _ = try innerContainer.decode(Empty.self)
}
}这段代码丢弃了所有非Double值,并去掉了Optional,但是您可以保留Optional类型并插入nil,而不是随意丢弃这些值。
https://stackoverflow.com/questions/49493966
复制相似问题