es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo construir un modelo a partir de un archivo JSON.

Este es mi primer trabajo con JSON en Swift y cuando intento analizar el archivo con mi modelo, aparece este error:

Los datos proporcionados no son JSON válidos.

Creo que el problema radica en cómo hago mi modelo.

La forma en que analizo el JSON:

import SwiftUI

struct EmergencyView: View {
    let emergency: [EmergencyNumberModel]
    init() {
        let url = Bundle.main.url(forResource: "emergency",
                                  withExtension: "json")!
        let data = try! Data(contentsOf: url)
        emergency = try! JSONDecoder().decode([EmergencyNumberModel].self, from: data) //Error
    }

var body: some View {
    List(emergency, id: \.id) { emer in

        if emer.Country != nil {
            Label(emer.Country, systemImage: "quote.bubble")
                .font(.headline)
        } else{
            Text(emer.Country)
        }
    }
    navigationTitle("Emergency")
}


}

Esta es una fracción del JSON que estoy usando, “emergency.json”:

““
[
{
“Country”: {
“Name”: “Afganistán”,
“ISOCode”: “AF”,
“ISONumeric”: “4”
},
“Ambulance”: {
“All”: [
“112”
]
},
“Fire”: {
“All”: [
“119”
]
},
“Police”: {
“All”: [
“119”
]
},
“Dispatch”: {
“All”: [
null
]
},
“Member_112”: false,
“LocalOnly”: true,
“Notes”: false
},

.
.
.

]

““`
Este es mi modelo, “EmergencyNumberModel.swift”:

struct EmergencyNumberModel: Codable, Identifiable {
var id = UUID()
let Country: String
let Ambulance: String
let Fire: String
let Police: String
let Dispatch: String
}

¿Necesito otras variables en mi modelo para acceder a las claves internas o los tipos de datos de las variables son incorrectos?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en los tipos de datos de las variables en su modelo. El JSON que proporcionó contiene objetos anidados, por lo que necesita crear un modelo que refleje esa estructura. Por ejemplo, podría crear un modelo de País para representar el objeto País en el JSON, y luego usar ese modelo en su modelo de EmergencyNumberModel :

    struct Country: Codable {
        let name: String
        let isoCode: String
        let isoNumeric: String
    } 
    
    struct EmergencyNumberModel: Codable, Identifiable {
        var id = UUID ()
        let country: Country
        let ambulance: String
        let fire: String
        let police: String
        let dispatch: String
    }
    

Comments are closed.