使用 JSONDecoder 解码 [[String]]?

Decoding [[String]] using JSONDecoder?

在过去的 12 个月里,我一直没有离开 Swift,但我刚刚回到一个以前可以工作的应用程序 (Swift 4.0),但现在似乎失败了,我不是知道为什么。

我的问题与JSON解码器有关,并试图解码字符串数组。

var tryingToDecode: [[String]]

我用的JSON格式如下(见下面的table),实际数据请用下面的link.

JASON DATA

我正在使用的代码是(见下文)self.requestData 是我正在使用的 JSON 数据,它在解码我所有其他数据时有效,它只是不适用于 [[String]]

func TEST_decodeReceivedJSON() {
    let decoder = JSONDecoder()
    do {
        let array = try decoder.decode(DataStruct.self, from: self.requestData)
        print(array)
    } catch {
        print("Error")
    }
}

我用于解码的结构是

struct DataStruct: Codable {
var data: [[String]]

}

这只是测试代码,但是当我编译它时,我总是被抛出 catch 错误。我试过在线搜索但找不到任何相关示例。奇怪的是,在 Xcode 10 之前,这个方法行得通,甚至被 App Store 接受。许多用户现在告诉我有些东西不起作用,确实如此,它似乎与使用 DataStruct 解码 [[String]] 的这个特定部分有关。

非常感谢任何帮助或指点。

[EDIT 001] 添加了一个 link 到 JSON 数据,下面的代码显示了一个最小的例子,我特别感兴趣的是我如何应该访问 [[String]] -- 字符串数组的数组。我正在尝试断言,因为这之前是有效的,我尝试解码 JSON(可能是 Swift update/change)的方式有问题吗?或者 JSON解码器.

[EDIT 002] 解决方案是 [[String?]],问题确实在 JSON,你只是看不到它原始数据的文本暴风雪,如果您查看下面的 table 视图,您可以清楚地看到 项 10 是 "null",因此代码需要一个可选字符串。

问题不在于 JSONDecoder,问题在于您的 JSON 数据。

当我检查您的代码时,出现以下错误:

valueNotFound(Swift.String, Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "data", intValue: nil), _JSONKey(stringValue: "Index 11", intValue: 11), _JSONKey(stringValue: "Index 10", intValue: 10)], debugDescription: "Expected String but found null value instead.", underlyingError: nil))

在您的代码中,您需要字符串,但当我检查您的 JSON 数据时,它包含 null 值,这显然会破坏编写的代码。要解决此问题,您只需更改模型定义以接受 null/nil 值:

struct DataStruct: Codable {
    var data: [[String?]]
}