我有这个json文件: http://serwer1356363.home.pl/pub/json.txt
和这个代码:
var ProductsObjectArray = [Products]()
let data = try Data(contentsOf: path)
let decoder = JSONDecoder()
let ProductsObjectArray = try decoder.decode(Products.self, from: data)
和型号:
struct ProductObject : Codable {
let palletHeight : Double?
let layerPallet : Int?
let prepCombisteamer : String?
let id : Int?
let prepOven : String?
}
当我启动此代码时,出现错误:
Swift.DecodingError.typeMismatch(Swift.Dictionary, Swift.DecodingError.Context(codingPath: [], debugDescription: "期望解码字典,但找到一个数组 相反。
我想将 json 写入产品对象数组对象数组。 有人怎么能修理它?
假设ProductObject
按预期实现,并且您正在适当地从文件中读取数据:
如错误中所述:
"本应解码字典,但找到了一个数组。">
json文件包含一个ProductObject
数组,似乎你的代码中有一个Products
,不应该用于解码器,可能你应该这样解码:
let ProductsObjectArray = try decoder.decode([ProductObject].self, from: data)
这意味着ProductsObjectArray
将是一组ProductObject
。与字典无关。
旁栏提示:在命名变量时,您应该遵循小骆驼大小写约定,而不是大骆驼大小写约定:
ProductsObjectArray
→productsObjectArray
ProductsObjectArray
→productsObjectArray
问题是您尝试在 JSON 是Array
时解析Dictionary
模型
改变
let ProductsObjectArray = try decoder.decode(Products.self, from: data)
自
let ProductsObjectArray = try decoder.decode([Products].self, from: data)
JSON 在顶层包含一个产品列表,因此您需要解码产品数组而不是单个字典。
尝试更换
let ProductsObjectArray = try decoder.decode(Products.self, from: data)
跟
let ProductsObjectArray = try decoder.decode([Products].self, from: data)