Ошибка импорта файла JSON в объект - PullRequest
0 голосов
/ 13 июня 2018

У меня есть этот файл 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: «Предполагается, что декодируется словарь, но вместо него найден массив.», underError:nil))

Я хотел бы записать json в массив объектов Products Object Array.Как кто-то может починить его?

Ответы [ 3 ]

0 голосов
/ 13 июня 2018

Ваш JSON содержит список продуктов верхнего уровня, поэтому вам нужно декодировать массив продуктов, а не один словарь.

попробуйте заменить

let ProductsObjectArray = try decoder.decode(Products.self, from: data)

на

let ProductsObjectArray = try decoder.decode([Products].self, from: data)
0 голосов
/ 13 июня 2018

Предполагается, что ProductObject реализовано должным образом, и вы соответственно читаете данные из файла:

Как указано в ошибке:

«Предполагается декодировать словарь, но вместо этого он нашел массив».

файл json содержит массив из ProductObject, похоже, в вашем коде есть Products, который должен не использоваться для декодера, вероятно, вы должны декодировать его следующим образом:

let ProductsObjectArray = try decoder.decode([ProductObject].self, from: data)

, что означает, что ProductsObjectArray будет массивом ProductObject.Ничего общего со словарями.


Помимо подсказки : когда дело доходит до именования переменных, вы должны следовать соглашению в нижнем верблюжьем регистре вместо верхнегодело верблюда одно:

ProductsObjectArrayproductsObjectArray

ProductsObjectArrayproductsObjectArray

0 голосов
/ 13 июня 2018

Проблема в том, что вы пытаетесь проанализировать модель Dictionary, когда JSON имеет значение Array

Изменить

let ProductsObjectArray = try decoder.decode(Products.self, from: data)

на

let ProductsObjectArray = try decoder.decode([Products].self, from: data)
...