在过去的12个月中,我离开了Swift,但是刚回到以前可以运行的应用程序(Swift 4.0)中,但是现在似乎失败了,我不确定为什么。
我的问题与 JSONDecoder 有关,并试图对字符串数组进行解码。
var tryingToDecode: [[String]]
我正在使用的JSON具有以下格式(请参见下表)以获取实际数据,请使用以下链接。
我正在使用的代码是(请参见下文) 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 为“空”,因此代码需要一个可选的字符串。
答案 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?]]
}