我有这个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: "预计解码字典但找到一个数组 相反。",underlyingError:nil))
我想将json写入Products Object Array对象数组。 有人可以修理它吗?
答案 0 :(得分:0)
问题是,当JSON为Dictionary
Array
模型
更改
let ProductsObjectArray = try decoder.decode(Products.self, from: data)
到
let ProductsObjectArray = try decoder.decode([Products].self, from: data)
答案 1 :(得分:0)
您的JSON包含顶级产品列表,因此您需要解码产品数组而不是单个字典。
尝试替换
let ProductsObjectArray = try decoder.decode(Products.self, from: data)
带
let ProductsObjectArray = try decoder.decode([Products].self, from: data)
答案 2 :(得分:0)
假设ProductObject
已按预期实施,并且您正在从文件中正确读取数据:
如错误中所述:
“预计解码字典但会找到一个数组。”
json文件包含ProductObject
的数组,您的代码中似乎有Products
, 对于解码器,可能你应该像这样解码它:
let ProductsObjectArray = try decoder.decode([ProductObject].self, from: data)
这意味着ProductsObjectArray
将是ProductObject
的数组。与字典无关。
除了条形码:在命名变量时,你应该遵循较低的驼峰案例约定而不是上层驼峰案例:
ProductsObjectArray
→productsObjectArray
ProductsObjectArray
→productsObjectArray