使用JSONDecoder解码[[String]]吗?

时间:2018-12-09 17:26:47

标签: ios arrays swift jsondecoder

在过去的12个月中,我离开了Swift,但是刚回到以前可以运行的应用程序(Swift 4.0)中,但是现在似乎失败了,我不确定为什么。

我的问题与 JSONDecoder 有关,并试图对字符串数组进行解码。

var tryingToDecode: [[String]]

我正在使用的JSON具有以下格式(请参见下表)以获取实际数据,请使用以下链接。

JASON DATA

enter image description here

我正在使用的代码是(请参见下文) 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中,如果您在原始数据的文本暴风雪中看不到它,在下面的表格视图中,您可以清楚地看到项目10 为“空”,因此代码需要一个可选的字符串。

enter image description here

1 个答案:

答案 0 :(得分:0)

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

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

  

valueNotFound(Swift.String,Swift.DecodingError.Context(codingPath:   [CodingKeys(stringValue:“ data”,intValue:nil),_JSONKey(stringValue:   “索引11”,intValue:11),_ JSONKey(stringValue:“索引10”,intValue:   10)],debugDescription:“期望的字符串,但找到空值   相反。”,underlyingError:nil))

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

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