O que esta ferramenta faz
Uma amostra JSON vira structs Swift que cumprem 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
}
O JSONDecoder lê isso direto. Cada objeto aninhado ganha o seu struct; um array de objetos na raiz ganha um typealias, para que a lista também tenha nome.
CodingKeys onde o nome teve de mudar
Um nome de propriedade não leva hífen, não começa por dígito, e uma palavra-chave pede crases. Quando uma chave não pode ser nome como está, o mapeamento é escrito:
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"
}
}
Repare que `class` guarda a sua chave sem mapeamento: as crases mudam como o Swift lê o nome, não o nome. A enumeração lista todos os casos assim que existe, porque um CodingKeys parcial derrubaria em silêncio as propriedades que omite.
JSONValue, e por que ela está ali
Um null, um array vazio ou um array misto não deixam nada a inferir. O Swift não tem um «valor JSON qualquer» pronto que decodifique e codifique, então sai uma enumeração pequena, uma vez, no fim:
let nickname: JSONValue?
let tags: [JSONValue]
Ela cobre as seis coisas que o JSON pode conter, e nada mais. Se depois você souber que o campo é uma string anulável, String? a substitui e a enumeração pode ir embora.
O que uma amostra não consegue dizer
Só um null produz um opcional. Todo o resto é não opcional, porque o documento trazia um valor — e um ? acrescentado depois tem um caractere, ao passo que um a mais esconde um campo ausente até a hora em que ele importa.
Int e Double vêm de como o número foi escrito, não do seu valor: 3 dá Int, 3.0 dá Double. A distinção importa no Swift, onde decodificar 3.5 num Int lança em vez de arredondar.
Privado por padrão
Tudo é executado localmente no seu navegador com JavaScript. Os seus dados nunca são enviados para um servidor, o que torna a ferramenta segura para conteúdo sensível e funciona offline.