首页 文章

使用JSONDecoder解码[[String]]?

提问于
浏览
-2

我已经离开了Swift过去12个月,但刚刚回到以前工作的应用程序(Swift 4.0),但现在似乎失败了,我不知道为什么 .

我的问题涉及 JSONDecoder 并尝试解码字符串数组的数组 .

var tryingToDecode: [[String]]

我使用的JSON具有以下格式(见下表)的实际数据请使用以下链接 .

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] 添加了JSON数据的链接,下面的代码显示了一个最小的例子,我特别感兴趣的是我应该如何访问[[String]] - 字符串数组的数组 . 我试图断言,因为这是有效的,我试图解码JSON(可能是Swift更新/更改)的方式有问题,或者JSONDecoder可能有问题 .

[EDIT 002] 解决方案是[[String?]]并且问题确实存在于JSON中,你只是在原始数据的文本暴风中看不到它,如果你看下面的表视图你可以清楚地看到 Item 10 是"null"因此代码需要一个可选的String .

1 回答

  • 0

    问题不在于 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:”预期的字符串,但找到了空值 . “,underlyingError:nil))

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

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

相关问题