我已经离开了Swift过去12个月,但刚刚回到以前工作的应用程序(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中,你只是在原始数据的文本暴风中看不到它,如果你看下面的表视图你可以清楚地看到 Item 10 是"null"因此代码需要一个可选的String .
1 回答
问题不在于
JSONDecoder
,问题在于您的JSON数据 .当我检查你的代码时,我收到以下错误:
在您的代码中,您需要字符串,但是当我检查您的JSON数据时,它包含
null
值,它显然会破坏编写的代码 . 要解决此问题,您只需将模型定义更改为接受null/nil
值: