Qué hace esta herramienta
Una muestra JSON pasa a ser structs de Swift conformes a Codable.
{ "id": 1, "firstName": "Ada", "address": { "city": "Paris" } }
struct Root: Codable {
let id: Int
let firstName: String
let address: Address
}
struct Address: Codable {
let city: String
}
JSONDecoder lee eso directamente. Cada objeto anidado recibe su struct; un array de objetos en la raíz recibe un typealias, para que la lista también tenga nombre.
CodingKeys allí donde el nombre tuvo que cambiar
Un nombre de propiedad no puede llevar guion, no puede empezar por dígito, y una palabra clave pide acentos graves. Cuando una clave no puede ser un nombre tal cual, la correspondencia se escribe:
struct Root: Codable {
let contentType: String
let `class`: Int
let f2fa: Bool
enum CodingKeys: String, CodingKey {
case contentType = "content-type"
case `class`
case f2fa = "2fa"
}
}
Fíjate en que `class` conserva su clave sin correspondencia: los acentos graves cambian cómo lee Swift el nombre, no el nombre. La enumeración lista todos los casos en cuanto existe, porque un CodingKeys parcial dejaría caer en silencio las propiedades que omite.
JSONValue, y por qué está ahí
Un null, un array vacío o uno mezclado no dejan nada que inferir. Swift no tiene un «valor JSON cualquiera» ya hecho que se decodifique y se codifique, así que se emite una enumeración pequeña una vez, al final:
let nickname: JSONValue?
let tags: [JSONValue]
Cubre las seis cosas que JSON puede contener, y nada más. Si más tarde sabes que el campo es una cadena anulable, String? la sustituye y la enumeración puede irse.
Lo que una muestra no puede decir
Solo un null produce un opcional. Todo lo demás es no opcional, porque el documento traía un valor, y un ? añadido después es un carácter, mientras que uno de más esconde un campo ausente hasta que importa.
Int y Double vienen de cómo se escribió el número, no de su valor: 3 da Int, 3.0 da Double. La distinción importa en Swift, donde decodificar 3.5 en un Int lanza en vez de redondear.
Privado por diseño
Todo se ejecuta localmente en tu navegador con JavaScript. Tus datos nunca se suben a un servidor, lo que hace que la herramienta sea segura para contenido sensible y funcione sin conexión.