我正在尝试在Swift 4.1中使用JSON解码器,但我一直在
“无法读取数据,因为格式不正确”
我不明白为什么。我正在调用Bundle.main.path
中的JSON文件,然后在URL(fileURLWithPath:)
中调用它后将其设置为变量。
查看文件路径并在本地打开它,似乎JSON数据的格式正确。在我的 data.json 文件中,数据设置如下。
{
"plant": "1015",
"name": "SPEEDVALE",
"key": "5035",
}
我有一个看起来像这样的结构
struct AllData: Decodable {
let plant: String
let name: String
let key: String
}
然后我有一个声明为此
的变量private var x: [AllData] = []
然后代码的解码块看起来像这样
do {
let path = Bundle.main.path(forResource: "data", ofType: "json")
let jsonData = try Data(contentsOf: URL(fileURLWithPath: path!))
do {
plantDataSerialized = try [JSONDecoder().decode(AllData.self, from: jsonData)]
print(plantDataSerialized)
} catch let error{
print(error.localizedDescription)
}
} catch let error {
print(error.localizedDescription)
}
答案 0 :(得分:1)
我认为您的JSON具有键值对数组,因此您正在以错误的方式进行解码。你必须这样做:
plantDataSerialized = try JSONDecoder().decode([AllData].self, from: jsonData)
如果您的JSON没有键值对数组,那么您需要这样做:
plantDataSerialized = try JSONDecoder().decode(AllData.self, from: jsonData)
答案 1 :(得分:1)
您在阅读文件时遇到错误,所以只需像这样使用
guard let jsonFile = Bundle.main.path(forResource: "data", ofType: "json") else { return}
guard let data = try? Data(contentsOf: URL(fileURLWithPath: jsonFile), options: []) else {return}
do {
let plantDataSerialized = try [JSONDecoder().decode(AllData.self, from: data)]
print(plantDataSerialized)
} catch let error{
print(error.localizedDescription)
}