将json文件导入到对象错误

时间:2018-06-13 08:17:57

标签: ios swift decodable

我有这个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对象数组。 有人可以修理它吗?

3 个答案:

答案 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的数组。与字典无关。

除了条形码:在命名变量时,你应该遵循较低的驼峰案例约定而不是上层驼峰案例:

ProductsObjectArrayproductsObjectArray

ProductsObjectArrayproductsObjectArray