Pular para o conteudo principal
CuteJSON
↑↓ Navegar Enter Selecionar Esc Fechar

Como converter JSON para YAML sem o classico bug 01234

Publicado 2 min de leitura Por Akash Kinkar Pandey

YAML e uma linguagem muito maior que JSON. Todo documento JSON e YAML valido, mas o reverso nao e verdade, o que significa que um conversor JSON para YAML pode ser completamente correto enquanto um conversor YAML para JSON tem que recusar as partes de YAML que JSON nao tem forma de expressar.

Usando o conversor JSON para YAML

Escolha uma direcao e uma largura de indentacao, depois pressione Converter. Ao escrever YAML, um mapping se torna uma chave por linha, um array repete seu traco por item, e um null se torna uma chave sem valor algum.

O bug contra o qual esta ferramenta especificamente protege

Um escalar YAML simples que parece um numero, um booleano, ou um indicador YAML e lido incorretamente como esse tipo no momento em que algo analisa o arquivo de volta. Um CEP de 01234 e o caso classico: escrito sem aspas, um analisador YAML o le como o numero 1234 e o zero a esquerda e perdido para sempre. O mesmo problema atinge uma string que por acaso se le como "true" ou "null".

Convertendo

{"zip":"01234","active":"true","note":null,"id":12345678901234567890}

produz:

zip: '01234'
active: 'true'
note: null
id: 12345678901234567890

Ambos os valores de string sao especificamente colocados entre aspas porque deixa-los sem aspas mudaria seu tipo ao voltar. O null real e escrito sem aspas, ja que essa e a ortografia correta sem aspas. O id de vinte digitos sobrevive intacto, porque isso vai pelo fluxo de tokens em vez de um valor analisado por JSON.parse.

O que o leitor aceita e o que recusa

Lendo YAML de volta para JSON, a ferramenta entende um mapping, uma sequencia, uma string entre aspas, um escalar de bloco, uma colecao de fluxo, e um escalar simples dobrado. Recusa ancoragens, aliases e tags por nome em vez de ignora-las silenciosamente, porque YAML nao tem equivalente para dar alias a um valor dentro de JSON e fingir o contrario produziria um documento que so parece correto.

Volta completa

Converter o exemplo acima de volta do YAML retorna o documento original exato: "01234" e "true" como strings, null como null, e o inteiro completo de vinte digitos. Essa volta completa e o verdadeiro teste de se as regras de aspas de um conversor estao corretas, ja que uma regra errada geralmente so aparece quando voce converte de volta e compara.

Voltar a todos os posts