我正在尝试在我的程序中本地解码 JSON 文件,但不断收到错误
Posted
技术标签:
【中文标题】我正在尝试在我的程序中本地解码 JSON 文件,但不断收到错误【英文标题】:I'm trying to Decode a JSON file locally in my program, but keep getting Error 【发布时间】:2018-05-25 19:56:48 【问题描述】:我正在尝试在 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
然后我有一个声明为 this 的变量
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)
【问题讨论】:
“无法读取数据,因为它的格式不正确”是什么意思? 这只是控制台中出现的错误。当我调试时它进入第一个 catch let 错误范围 我已经执行了你的代码并给出了正确的结果 [__lldb_expr_69.AllData(plant: "1015", name: "SPEEDVALE", key: "5035")] @SamaBalaYam 你能告诉我在控制台中读取文件后如何显示数据吗?我也试图弄清楚这一点。 像 private var x: [AllData] = [] ...... ..... x = try [JSONDecoder().decode(AllData.self, from: jsonData) ] 打印(x) 【参考方案1】:我认为您的 JSON 具有键值对数组,因此您以错误的方式进行解码。你必须这样做:
plantDataSerialized = try JSONDecoder().decode([AllData].self, from: jsonData)
如果您的 JSON 没有键值对数组,那么您需要这样做:
plantDataSerialized = try JSONDecoder().decode(AllData.self, from: jsonData)
【讨论】:
然后我得到“无法将类型'AllData'的值分配给类型'[AllData]'”所以我尝试制作plantDataSerialized:AllData?但这没有用。 @simonmcneil plantDataSerialized 具有 AllData 数组。表示 plantDataSerialized 将自动获取 [AllData] 中的响应。您不需要使用其他变量。【参考方案2】:你在读取文件时出错,所以就这样使用它
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)
【讨论】:
以上是关于我正在尝试在我的程序中本地解码 JSON 文件,但不断收到错误的主要内容,如果未能解决你的问题,请参考以下文章