Pular para o conteúdo
Case Converter Online
pt

Converter JSON para YAML

Cole um JSON para ter um YAML limpo, ou troque o sentido para transformar YAML em JSON. A conversão roda no seu navegador enquanto você digita.

Cole um JSON ou clique em Exemplo. A conversão roda no seu navegador.

JSON e YAML: os mesmos dados, dois estilos

JSON e YAML descrevem as mesmas coisas: objetos (chamados de mapeamentos no YAML), listas, strings, números, booleanos e null. O JSON usa chaves, colchetes, aspas e vírgulas. O YAML usa recuo e hifens, o que o deixa mais curto e mais fácil de ler e editar à mão. É por isso que ferramentas como Kubernetes, Docker Compose, GitHub Actions e Ansible usam YAML na configuração, enquanto as APIs normalmente falam JSON.

Muitas vezes é preciso passar de um para o outro. Uma API devolve JSON e você quer o conteúdo em um arquivo de configuração. Ou uma configuração em YAML precisa ser enviada para um programa que só lê JSON. Este conversor faz os dois.

Como usar

  1. Escolha um sentido com o botão JSON para YAML ou YAML para JSON.
  2. Cole seus dados na caixa da esquerda, clique em Abrir arquivo ou em Exemplo. O resultado aparece à direita enquanto você digita.
  3. Escolha um Recuo de 2 ou 4 espaços. No sentido de YAML para JSON também há a opção Minificado.
  4. De JSON para YAML, ligue Ordenar chaves de A a Z para colocar as chaves em ordem alfabética.
  5. Clique em Copiar, ou em Baixar para salvar um arquivo .yaml ou .json.

Quando você troca de sentido, o resultado atual vai para a entrada, para você converter de um lado para o outro e conferir a ida e a volta.

Exemplo de JSON para YAML

{"name":"web-app","version":3,"private":true,"ports":[80,443],"database":{"host":"localhost","password":null},"tags":["api","v2"]}

vira:

name: web-app
version: 3
private: true
ports:
  - 80
  - 443
database:
  host: localhost
  password: null
tags:
  - api
  - v2

Aspas seguras

Algumas strings parecem outros tipos para um parser de YAML. O conversor coloca essas strings entre aspas para que continuem sendo strings. Este JSON:

{"zip":"02134","enabled":"yes","version":"1.10","note":"a: b","empty":""}

vira:

zip: "02134"
enabled: "yes"
version: "1.10"
note: "a: b"
empty: ""

Sem as aspas, 02134 perderia o zero à esquerda, 1.10 viraria o número 1.1, e um parser antigo de YAML 1.1 (o PyYAML e muitas ferramentas de CI usam essas regras) leria yes como true. O conversor segue as regras de aspas mais rigorosas, para que o resultado seja lido da mesma forma por parsers antigos e novos. Datas como "2024-01-15" ficam entre aspas pelo mesmo motivo. Textos em português, com acentos e cedilha, não precisam de aspas e saem como estão.

Exemplo de YAML para JSON

# Configurações do app
name: web-app
ports:
  - 80
  - 443
debug: false
retries: 3
owner: ~

vira:

{
  "name": "web-app",
  "ports": [
    80,
    443
  ],
  "debug": false,
  "retries": 3,
  "owner": null
}

O comentário sumiu, porque o JSON não tem comentários, e ~ é a abreviação do YAML para null.

As merge keys são resolvidas. Este arquivo no estilo do Rails:

defaults: &defaults
  adapter: postgres
  host: localhost
development:
  <<: *defaults
  database: dev_db

dá:

{
  "defaults": {
    "adapter": "postgres",
    "host": "localhost"
  },
  "development": {
    "adapter": "postgres",
    "host": "localhost",
    "database": "dev_db"
  }
}

Dois documentos separados por --- (por exemplo, kind: Service e kind: Deployment) viram um único array. Com a opção Minificado, fica [{"kind":"Service"},{"kind":"Deployment"}].

Como os valores são lidos

A conversão de YAML para JSON usa as regras do YAML 1.2. Por essas regras, yes, no e on são strings comuns, só true e false são booleanos, e as datas continuam strings. Esta entrada:

a: yes
b: no
c: on
d: true
e: 010
f: 0o10
g: 1e3
h: 2024-01-15

é convertida (minificada) para:

{"a":"yes","b":"no","c":"on","d":true,"e":10,"f":8,"g":1000,"h":"2024-01-15"}

Repare que 010 é lido como dez, e 0o10 é o octal de oito.

Se um valor precisa continuar como texto, coloque-o entre aspas no YAML.

Dicas para uma ida e volta limpa

  • Converter JSON para YAML e de volta dá os mesmos dados, mas nem sempre o mesmo texto. A ordem das chaves é mantida, a não ser que você ligue Ordenar chaves de A a Z.
  • Comentários, âncoras e tags personalizadas do YAML não têm equivalente no JSON. As âncoras são expandidas em cópias completas dos dados.
  • Inteiros muito grandes, como IDs de 20 dígitos, ficam exatos de JSON para YAML quando o navegador permite. De YAML para JSON eles passam pelos números do JavaScript, então guarde IDs longos como strings entre aspas.
  • Seus arquivos ficam no seu aparelho. Nada é enviado.

Erros

Os erros são apontados com a linha e a coluna, e Mostrar na entrada leva até eles. Uma vírgula sobrando no JSON dá Linha 3, coluna 1: Vírgula final antes de "}" não é permitida. No YAML, uma chave repetida dá Linha 2, coluna 1: Map keys must be unique, e as tabulações usadas no recuo são recusadas, porque o YAML só aceita espaços. As mensagens do JSON vêm em português; as do YAML vêm da biblioteca de YAML e continuam em inglês, só com a linha e a coluna em português.

Outras formas de converter

yq. A versão em Go do yq converte na linha de comando: ele lê JSON como entrada, porque JSON é YAML válido, e consegue escrever qualquer um dos dois formatos.

Python. Com o pacote PyYAML, yaml.safe_dump(json.load(f)) escreve YAML a partir de um arquivo JSON. O PyYAML segue o YAML 1.1, então confira strings como yes e no. Acrescente allow_unicode=True para que os acentos não virem escapes.

VS Code. Várias extensões acrescentam comandos para converter uma seleção entre JSON e YAML.

Ferramentas relacionadas

Para organizar um arquivo YAML sem convertê-lo, use o formatador YAML. Para conferir ou formatar o JSON antes, use o formatador JSON. Para dados de planilha, comece pela ferramenta de converter CSV para JSON.

JSON para YAML: perguntas e respostas

Por que alguns valores ficam entre aspas no YAML?

As strings que um parser de YAML poderia ler como outra coisa ganham aspas. "02134" viraria o número 2134, e "yes" viraria true em parsers mais antigos. As aspas os mantêm como texto, então o YAML significa exatamente o que o JSON significava.

O que acontece com os comentários quando converto YAML para JSON?

Eles são descartados, porque o JSON não tem comentários. Se você converter de volta, os comentários não voltam. Guarde o arquivo YAML original se os comentários forem importantes.

Dá para converter um arquivo com vários documentos YAML?

Dá. Os documentos separados por --- viram um array JSON, com um item por documento, na mesma ordem.

Âncoras e merge keys são aceitas?

São. Aliases como *defaults são trocados pelos dados a que apontam, e as merge keys escritas como <<: *defaults são mescladas no mapeamento, como o Docker Compose e o Rails esperam.

Meus dados são enviados para algum lugar?

Não. Os dois sentidos rodam no seu navegador. Nada do que você cola ou abre é enviado.

Mais ferramentas de código e dados

Ver todas as ferramentas