【发布时间】:2018-12-09 17:26:47
【问题描述】:
在过去的 12 个月里,我一直远离 Swift,但刚刚回到一个以前可以运行的应用程序 (Swift 4.0),但现在似乎失败了,我不知道为什么。
我的问题与 JSONDecoder 和尝试解码字符串数组的数组有关。
var tryingToDecode: [[String]]
我使用的 JSON 格式如下(见下表),实际数据请使用以下链接。
我正在使用的代码是(见下文)self.requestData 是我正在使用的 JSON 数据,它在解码我的所有其他数据时有效,它只是不适用于 [ [字符串]]
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”,因此代码需要一个可选的字符串。
【问题讨论】:
-
请显示真实的 JSON 数据,而不是一些表格视图 - 更好的是:minimal 示例演示问题。
-
解码器准确地告诉你问题出在哪里,但你把这些信息扔掉了。为什么?将
print("Error")替换为print(error),您将立即知道问题所在。 -
我已经用 JSON 数据
{ "data" : [["foo", "bar"], ["baz"]] }测试了你的代码,它工作正常。链接后面的 JSON 看起来完全不同,并且与struct DataStruct不匹配。 – 我们需要minimal reproducible example。 -
感谢大家的出色 cmets,感谢 matt 的“错误”指针,非常感谢。
标签: ios arrays swift jsondecoder