Ce que fait cet outil
Un échantillon JSON devient des structs Swift conformes à 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 lit cela directement. Chaque objet imbriqué obtient sa struct ; un tableau d’objets à la racine obtient un typealias, pour que la liste ait un nom elle aussi.
Des CodingKeys là où le nom a dû changer
Un nom de propriété ne peut pas contenir de tiret, ne peut pas commencer par un chiffre, et un mot-clé demande des accents graves. Quand une clé ne peut pas être un nom telle quelle, la correspondance est écrite :
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"
}
}
Remarquez que `class` garde sa clé sans correspondance : les accents graves changent la façon dont Swift lit le nom, pas le nom lui-même. L’énumération liste tous les cas dès qu’elle existe, car un CodingKeys partiel laisserait tomber en silence les propriétés qu’il omet.
JSONValue, et pourquoi elle est là
Un null, un tableau vide ou un tableau mêlé ne laissent rien à inférer. Swift n’a pas de « valeur JSON quelconque » toute faite qui se décode et s’encode, une petite énumération est donc émise une fois, à la fin :
let nickname: JSONValue?
let tags: [JSONValue]
Elle traite les six choses que JSON peut contenir, et rien d’autre. Si vous apprenez plus tard que le champ est une chaîne nullable, String? la remplace et l’énumération peut partir.
Ce qu’un échantillon ne peut pas dire
Seul un null produit un optionnel. Tout le reste est non optionnel, parce que le document avait une valeur — et un ? ajouté plus tard fait un caractère, tandis qu’un ? de trop masque un champ manquant jusqu’au moment où il compte.
Int et Double viennent de l’écriture du nombre, pas de sa valeur : 3 donne Int, 3.0 donne Double. La distinction compte en Swift, où décoder 3.5 dans un Int lève une erreur au lieu d’arrondir.
Confidentiel par conception
Tout s’exécute localement dans votre navigateur en JavaScript. Vos données ne sont jamais envoyées sur un serveur, ce qui rend l’outil sûr pour des contenus sensibles, et il fonctionne hors ligne.