0

我正在尝试在 Swift 4.1 中使用 JSON 解码器,但我不断收到

“无法读取数据,因为它的格式不正确”

我不知道为什么。我从 中调用一个 JSON 文件Bundle.main.path,然后在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)
}
4

2 回答 2

1

我认为您的 JSON 具有键值对数组,因此您以错误的方式进行解码。你必须这样做:

plantDataSerialized = try JSONDecoder().decode([AllData].self, from: jsonData)

如果您的 JSON 没有键值对数组,那么您需要这样做:

plantDataSerialized = try JSONDecoder().decode(AllData.self, from: jsonData)
于 2018-05-25T19:59:44.757 回答
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)
                }
于 2018-05-25T20:11:25.757 回答