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.

JSONDecoder().decode falla cuando hay comas.

JSONDecoder().decode falla cuando hay comas al final de un campo de nombre. ¿Por qué está sucediendo? ¿Cómo puedo resolverlo?

let string = "[{\"name\":\"Homeoffice Marc,\",\"Km\":846.7911330652549,\"Strid\":\"DE262B62633E34AAA8A622E189B42920B319C371\"},{\"name\":\"Küche,\",\"Km\":857.8694764184313,\"Strid\":\"BD1A60D736BE86377121A2CC713251DBE2603BD5\"},{\"name\":\"Besprechungszimmer,\",\"Km\":857.8721480885644,\"Strid\":\"751A10C5D3065F91CC9F5BDF5E7111DC452D1C39\"},{\"name\":\"Büro Vertrieb,\",\"Km\":857.8723091979339,\"Strid\":\"148F97F324BB59EAFF613A0EB3766E026CFAB320\"},{\"name\":\"Büro Produktmanagement und Support,\",\"Km\":857.8734889037903,\"Strid\":\"3A37C955F7D3C012577B1D19B6F662AD233372A5\"},{\"name\":\"Tischkicker,\",\"Km\":857.8748603133218,\"Strid\":\"B5B8A86BBA2102AF56721166D2E814736EF13132\"},{\"name\":\"Büro Entwicklung,\",\"Km\":857.8773683652697,\"Strid\":\"E6814BE03EEF386E63AD7609D970BD9BA8CE71AD\"},{\"name\":\"Syfit GmbH,\",\"Km\":857.877841443768,\"Strid\":\"64F80B1EC04D008E060F28D7F198A8C39DCD53B5\"},{\"name\":\"Büro Zolti,\",\"Km\":857.8798725612223,\"Strid\":\"23F4C2E1C467AEC9D55D873DC3ED7FC73CD92177\"},{\"name\":\"Globale Suche\",\"Km\":null,\"Km\":846.7911330652549}]"

let data = string.data(using: .utf8) ?? Data()
let areas = try? JSONDecoder().decode([AreaModel].self, from: data)

decodificar estos datos devuelve nulo.

Mi modelo:

struct AreaModel: Codable {
    enum CodingKeys: String, CodingKey {
        case name
        case km = "Km"
        case strid = "Strid"
    }

    let name: String
    let km: Double?
    let strid: String
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema está ocurriendo porque las comas al final del campo de nombre hacen que los datos JSON sean inválidos. Según la especificación JSON, las comas solo deben usarse para separar elementos en un arreglo u objeto, no para campos finales.

    Para resolver este problema, puedes modificar los datos JSON para eliminar las comas al final de los campos de nombre antes de decodificarlo. Alternativamente, puedes usar una expresión regular para reemplazar las comas inválidas por una sintaxis válida.

    Por ejemplo, puedes modificar la cadena de la siguiente manera:

    let correctedString = string.replacingOccurrences(of: ",\\s*}", with: "}", options: .regularExpression)
    

    Esto eliminará cualquier coma al final antes de un corchete de cierre, para que los datos JSON sean válidos.

    Luego, puedes decodificar los datos corregidos de la siguiente manera:

    let data = correctedString.data(using: .utf8) ?? Data()
    let areas = try? JSONDecoder().decode([AreaModel].self, from: data)
    

    Esto debería decodificar exitosamente los datos JSON en tu estructura AreaModel.

Comments are closed.