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.
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?
| Parâmetro | Tipo | Padrão | Comportamento e casos-limite |
|---|---|---|---|
| Indentação | espaços | 2 | Espaç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ências | booleano | off | Desligado 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 chaves | booleano | off | Alfabética em vez de ordem do documento. Útil para comparar duas configurações escritas em ordens diferentes. |
| Início do documento | booleano | off | Emite o marcador ---. Obrigatório ao concatenar vários documentos em um único arquivo, como é o caso dos manifestos Kubernetes. |
| Strings ambíguas | entre aspas | sempre | no, 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 multilinha | escalar em bloco | on | Escrito 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ícito | Um array ou objeto vazio é escrito no estilo fluxo. Omiti-los completamente tornaria uma lista vazia indistinguível de um nulo. |
| null | null | null | Escrito 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 volta | verificado | a cada conversão | A 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.