Разобрать локальный файл json для объекта - PullRequest
0 голосов
/ 22 мая 2018

У меня есть этот код:

struct ProductObject : Codable {
    let palletHeight : Double?
    let layerPallet : Int?
    let prepCombisteamer : String?
    let id : Int?
    let avikoWorlds : [String]?
    let avikoSegments : [String]?
    let sunFlower : Bool?
    let inPieces : Bool?
    let noBox : Int?
    let prepFryingPan : String?
    let packageContents : Double?
    let carbohydrates : Int?
    let fat : Double?
    let eanBox : Int?
    let weightYieldPercent : Int?
    let kcal : Int?
    let markedAsFavourite1 : Bool?
    let avikoPodSegmentyRynku : [String]?
    let prepPot : String?
    let prepMicrowave : String?
    let name : String?
    let code : Int?
    let prepDeepFryer : String?
    let avikoConcepts : [String]?
    let boxLayer : Int?
    let avikoSegmentyRynku : [String]?
    let active : Bool?
    let shelfLifeTimeFrame : String?
    let markedAsFavourite2 : Bool?
    let palletWeight : Double?
    let changeTime : ChangeTime?
    let kj : Int?
    let langVersions : [LangVersions]?
    let proteins : Double?
    let markedAsFavourite3 : Bool?
    let containsGluten : Bool?
    let regions : [Int]?
    let eanFoil : Int?
    let shelfLife : Int?
    let contentPerBox : Int?
    let prepOven : String?
}
func downloadImagesFromJsonProductFile(fileName: URL){

        let filePath = fileName.path
        let fileManager = FileManager.default
        if fileManager.fileExists(atPath: filePath) {
            do {
                let data = try Data(contentsOf: fileName)
                let jsonData = try JSONDecoder().decode(ProductObject.self, from: data)

            } catch let error {
                self.errorLoginMessage(txt: "MainView - Error 109: Problem with parse file \(error)", title: "Blad".localized())
            }
        }
    }

downloadImagesFromJsonProductFile(fileName: documentsDir.appendingPathComponent((AppGlobalManager.sharedManager.loggedUser?.selectedLanguage)! + "/json/products.json"))

Мой локальный файл json: https://files.fm/u/73n845ty

Когда я запускаю функцию: downloadImagesFromJsonProductFile У меня ошибка (при запуске приложения): Проблема с анализомfile typeMismatch (Swift.Dictionary, Swift.DecodingError.Context (coding-path: [], debugDescription: «Ожидался словарь декодирования, но вместо него найден массив.», underError: will).

Как это исправить

1 Ответ

0 голосов
/ 22 мая 2018

Когда я просматриваю ваш JSON здесь http://json.parser.online.fr/,, есть массив в качестве корневого объекта, поэтому вы должны сделать

let json = try JSONDecoder().decode([ProductObject].self, from: data)

ОБНОВЛЕНИЕ

Пожалуйста, создайтеJSON struct Codable отсюда json4swift , пожалуйста, сначала разрешите ошибки несоответствия типов, иначе ваш JSON не может быть проанализирован, и вы получите ошибки несоответствия типов.

Вы можете получить код продукта, выполнив,

let jsonData = try JSONDecoder().decode([ProductObject].self, from: data)

for detail in jsonData {
    print(detail.code ?? "")
}
...