Pular para o conteúdo principal

Converter JSON em YAML

O JSON para YAML converte um documento em YAML no seu navegador e verifica o resultado fazendo o parse dele de volta. A regra que faz isso funcionar: um string recebe aspas sempre que escrevê-lo sem aspas resolveria para outra coisa — então o string "no" mantém as aspas, e "007", "null" e "12:30" também.

Só local
Recuo
JSON
0 B1 linhaLin. 1, Col. 1
YAMLsomente leitura
0 B1 linha

Como funciona o Converter JSON em YAML?

Ir de JSON para YAML parece a direção fácil — YAML é um superconjunto, então todo documento JSON já é YAML válido. Isso é verdade, e não é o trabalho. O trabalho é produzir um YAML que uma pessoa queira ler, o que significa estilo block em vez de estilo flow, e é aí que aparece o problema de correção.

As aspas não são cosméticas

YAML resolve escalares sem aspas por padrão. Escreva o string no sem aspas e um leitor YAML 1.1 carrega o booleano false. Escreva 007 e você recebe o número 7. Escreva null, true, 12:30, 0x1f ou .inf e cada um volta como algo que não é um string.

Por isso o emissor roda as regras de resolução ao contrário: um string recebe aspas sempre que escrevê-lo sem aspas resolveria para qualquer coisa que não fosse ele mesmo. Ele também coloca aspas nos tokens que o 1.1 resolveria de forma diferente mesmo que o 1.2 não, porque a saída deve significar a mesma coisa onde quer que seja lida. É por isso que o resultado tem aspas em lugares que parecem desnecessários — cada uma delas é estrutural.

A ida e volta é verificada, não apenas afirmada

Toda conversão tem o resultado parseado de volta e comparado com o JSON original, e o resultado é reportado na faixa de estatísticas. Uma regra de aspas que deixa passar um caso é exatamente o tipo de bug que produz uma saída plausível e uma config corrompida, então a verificação roda no seu documento, e não apenas em uma suíte de testes.

Strings de múltiplas linhas viram block scalars

Um string contendo quebras de linha é escrito como um bloco |, e esse é o motivo de as pessoas colocarem certificados, scripts e SQL em YAML em vez de JSON: uma chave PEM em JSON é uma única linha ilegível de escapes \n. O indicador de chomping segue o dado — | quando o string termina com quebra de linha, |- quando não termina — então o byte final sobrevive.

Chaves recebem aspas pela mesma regra que os valores

Uma chave também é um escalar. y: 2 carrega como {True: 2} em um leitor 1.1, e on: — a segunda chave de todo workflow de GitHub Actions — é o exemplo mais conhecido. Chaves recebem o mesmo tratamento que os valores, e é por isso que "on" sai com aspas.

JSON

{
  "regions": ["NO", "SE"],
  "build": "007",
  "enabled": true
}

YAML

regions:
- "NO"
- "SE"
build: "007"
enabled: true

Quais opções e casos-limite o Converter JSON em YAML suporta?

Referência técnica e opções
ParâmetroTipoPadrãoComportamento e casos-limite
Indentaçãoespaços2Espaços por nível. O YAML proíbe completamente o uso de tabulações na indentação, portanto este é um número e não um caractere.
Indentar sequênciasbooleanooffDesligado posiciona os traços de lista na coluna da chave pai, que é a aparência de manifestos Kubernetes escritos à mão. Ligado os indenta um nível, que é o que a maioria das bibliotecas emite. Ambos são válidos.
Ordenar chavesbooleanooffAlfabética em vez de ordem do documento. Útil para comparar duas configurações escritas em ordens diferentes.
Início do documentobooleanooffEmite o marcador ---. Obrigatório ao concatenar vários documentos em um único arquivo, como é o caso dos manifestos Kubernetes.
Strings ambíguasentre aspassempreno, yes, on, off, y, n, true, null, ~, 007, 12:30, 0x1f, .inf e a string vazia. Cada um seria resolvido para um não-string se escrito sem aspas.
Strings multilinhaescalar em blocoonEscrito como um bloco |, com o indicador de truncamento correspondente se a string termina em uma nova linha, para que nenhum byte seja adicionado ou perdido.
Contêineres vazios[] e {}explícitoUm array ou objeto vazio é escrito no estilo fluxo. Omiti-los completamente tornaria uma lista vazia indistinguível de um nulo.
nullnullnullEscrito como a palavra null em vez de ser deixado vazio ou escrito como ~, porque é a grafia que lê da mesma forma para uma pessoa e para todo analisador.
Ida e voltaverificadoa cada conversãoA saída é analisada novamente e comparada com a entrada. O resultado é relatado na faixa de estatísticas em vez de ser assumido.

Perguntas frequentes

Por que ele colocou aspas em volta do meu string de aparência comum?

Porque escrevê-lo sem aspas resolveria para outra coisa. "no" vira o booleano false em um leitor YAML 1.1, "007" vira o número 7, "12:30" vira um número sexagesimal, e "null" vira null. As aspas são a única coisa mantendo o valor como string, o que a verificação de ida e volta na faixa de estatísticas confirma no seu documento real.

YAML é realmente menor que JSON?

Geralmente, e a faixa de estatísticas mostra o número para o seu documento. Tirar chaves, colchetes e as aspas em volta das chaves remove uma fração surpreendente de um arquivo de config. O que o YAML compra em relação ao JSON, porém, não é tamanho — são comentários, que o JSON não tem como expressar de jeito nenhum, e strings de múltiplas linhas legíveis.

Consigo recuperar meus comentários?

Não, e nada consegue. JSON não tem comentários, então quando um documento virou JSON os comentários já se foram — não há nada na entrada para recuperar. Se você está editando um arquivo YAML, edite o YAML: uma ida e volta por JSON remove todo comentário e não devolve nenhuma ordem.

Qual estilo de lista devo usar?

Qualquer um; os dois fazem o parse de forma idêntica. Traços na coluna da chave pai é a aparência de manifests de Kubernetes escritos à mão e de workflows de GitHub, e economiza duas colunas de indentação em arquivos profundamente aninhados. Traços indentados é o que a maioria das bibliotecas emite e o que alguns padrões internos exigem. Escolha o que casar com os arquivos ao redor.

Por que meu string de múltiplas linhas não está escapado como estava em JSON?

Porque ele é escrito como um block scalar | , que mantém quebras de linha reais em vez de escapes \n. Este é o melhor motivo para usar YAML em um arquivo de config: um certificado PEM ou um shell script é legível em YAML e é uma única linha de 3,000 caracteres em JSON. O indicador de chomping é escolhido para preservar se o seu string terminava ou não com quebra de linha.

Meu JSON é enviado?

Não. O parse, a conversão e a verificação de ida e volta rodam todos no seu navegador. Você pode confirmar no painel Network. Isso importa aqui porque um JSON sendo convertido em YAML geralmente está prestes a virar um arquivo de config, e arquivos de config carregam strings de conexão e chaves.