JSON, YAML, CSV e Markdown são quatro formatos de texto com estrutura, mas cada um foi projetado para um trabalho diferente. Use CSV em um arquivo de configuração e a estrutura fica plana. Escolha YAML para uma resposta de API e você perde o rigor que queria. Guarde dados tabulares em JSON e cada linha repete as chaves. Trate Markdown como armazenamento primário e você terá que reconstruir a estrutura depois. Escolher o formato errado custa caro em ferramentas, validação e horas de desenvolvimento.
Este artigo é um cheatsheet de uma página para responder "qual formato eu uso?". Começa com uma matriz de decisão rápida e segue com tabela de recursos, suporte a comentários, ecossistema de parsers, matriz de decisão por caso de uso, erros comuns, escolha para contexto de LLM e referências de specs — tudo em uma única aba.
Matriz de decisão rápida — escolha um formato
Se você ler só uma tabela, leia esta.
| Caso de uso | Formato recomendado | Por quê |
|---|---|---|
| Requisição ou resposta de API REST | JSON | Estrito, parser padrão em qualquer linguagem |
| Kubernetes / GitHub Actions / Docker Compose | YAML | Comentários, âncoras e indentação legível |
| Arquivo de configuração de aplicação | YAML (ou TOML / JSON5) | Precisa de comentários |
| Dados tabulares e ida e volta com Excel | CSV | Abre direto em planilhas |
| Saída de logs estruturados | JSON Lines | Um registro por linha, ótimo para grep e jq |
| README do GitHub e documentação técnica | Markdown | Renderiza no GitHub, Dev.to, Medium e seu CMS |
| Contexto para ChatGPT, Claude e Gemini | Markdown | Melhor eficiência de tokens |
| Frontmatter + corpo de artigo em sites estáticos | YAML + Markdown | Frontmatter para estrutura, corpo para prosa |
| Tabelas em documentos legíveis | Tabela Markdown | Renderiza em texto puro e no GitHub |
| Processamento numérico em massa | CSV → DataFrame | pandas / Polars leem rápido |
Versão curta: JSON para troca entre máquinas, YAML para configuração editada à mão, CSV para dados tabulares, Markdown para prosa. Depois você ajusta nos extremos pelas exceções abaixo.
Teste primeiro — converta entre os quatro formatos no navegador
As diferenças ficam mais claras quando você coloca o mesmo dado nos quatro formatos. O FormatArc tem sete ferramentas browser-side para converter entre os quatro formatos cobertos aqui. Sem upload, sem ida ao servidor — o que você cola fica na sua aba.
- JSON Formatter — validar e formatar JSON
- YAML to JSON / JSON to YAML — ida e volta entre YAML e JSON
- CSV to JSON — transformar dados tabulares em um array estruturado
- CSV to Markdown — converter uma coluna de planilha em tabela Markdown
- Markdown to HTML / HTML to Markdown — converter entre formatos de documento
Se você já hesitou em colar dados de produção em uma ferramenta online que envia ao servidor dela, veja Conversores online são seguros? para um modelo de avaliação desse risco.
O que este artigo cobre — e o que não cobre
Comparamos quatro formatos: JSON, YAML, CSV e Markdown. É a combinação mais frequente no desenvolvimento web moderno, em configuração, em troca de dados e em documentação, e bate exatamente com as sete ferramentas do FormatArc.
Fora de escopo, por escolha:
- XML — ainda importante para SOAP, RSS, SVG e Office Open XML, mas raramente escolhido para projetos novos.
- TOML — usado pelo Cargo e
pyproject.toml. Sobrepõe-se a YAML e JSON5 no espaço de configuração e é incomum em trabalho para navegador. - Parquet — formato binário colunar para big data. Fora do escopo de uma comparação entre formatos de texto.
- XLSX / ODS — formatos binários de planilha. Aparecem só pelo caminho de exportação em CSV.
Se você quer uma comparação de cinco formatos com XML ou TOML, existem vários concorrentes. O ângulo aqui é outro: Markdown recebe tratamento de primeira, porque em 2026 ele está ao lado de JSON e YAML no fluxo diário de quem escreve APIs, configurações, READMEs e prompts para LLM.
O mesmo dado nos quatro formatos
Lado a lado, com dois usuários, idades e uma lista de habilidades, os formatos mostram a personalidade de cada um.
JSON
{
"users": [
{ "name": "Alice", "age": 30, "skills": ["Python", "Go"] },
{ "name": "Bob", "age": 25, "skills": ["JavaScript"] }
]
}
YAML
users:
- name: Alice
age: 30
skills:
- Python
- Go
- name: Bob
age: 25
skills:
- JavaScript
CSV
CSV não expressa aninhamento de forma nativa, então skills precisa ser achatado. Padrões comuns são juntar por um delimitador, expandir em várias colunas ou separar em outra tabela. A versão mais simples com delimitador:
name,age,skills
Alice,30,Python;Go
Bob,25,JavaScript
Markdown
Markdown é um formato de documento, não de dados. A estrutura acontece via extensão de tabelas do GFM.
| name | age | skills |
|-------|-----|-------------|
| Alice | 30 | Python, Go |
| Bob | 25 | JavaScript |
A mesma informação em quatro formas. JSON é estrito e fácil de parsear. YAML lê naturalmente. CSV brilha em tabelas mas não aninha. Markdown fica bem ao renderizar mas perde a estrutura se for tratado como armazenamento de dados.
Matriz de recursos por formato
O que cada formato consegue de fato expressar?
| Recurso | JSON | YAML | CSV | Markdown |
|---|---|---|---|---|
| Estrutura hierárquica (aninhada) | Sim | Sim | Não (apenas plano) | Limitada (listas/citações aninhadas) |
| Arrays | Sim | Sim | Limitado (somente linhas) | Limitado (listas) |
| Números, booleanos, null | Sim | Sim (com tipagem implícita) | Não (string por padrão) | Não |
| Comentários | Não | Sim (#) |
Não (na prática) | Sim (<!-- -->) |
| Escape de strings | Estrito | Vários estilos | Fraco (variação entre libs) | Quase desnecessário |
| Segurança binária | Não (via Base64) | Não (idem) | Não (idem) | Não |
| Leitura streaming | Limitada (JSON Lines) | Limitada | Sim | Não |
| Maturidade da spec | RFC 8259 (2017) | YAML 1.2.2 (2021) | RFC 4180 (2005) | CommonMark 0.31 (2024) + GFM |
| Dificuldade de escrever à mão | Média | Baixa | Baixa (casos simples) | Baixa |
| Dificuldade de parsing | Baixa | Alta | Média (variação entre libs) | Alta (gera uma árvore) |
| Naturalidade para dados tabulares | Limitada | Limitada | Excelente | Excelente (na sintaxe de tabela) |
| Tamanho prático de um único arquivo | Alguns MB | Alguns MB | Multi-GB possível | Centenas de KB |
JSON e YAML compartilham o mesmo modelo de dados subjacente (objetos, arrays, primitivos), por isso o round-trip entre eles é direto. O FormatArc oferece YAML to JSON e JSON to YAML nas duas direções. Para um aprofundamento na comparação de só dois formatos, veja YAML vs JSON: 7 diferenças.
Matriz de suporte a comentários
É aqui que a escolha de formato de configuração se decide de verdade. Os padrões e dialetos divergem nesse ponto.
| Formato | Comentários | Sintaxe | Notas |
|---|---|---|---|
| JSON padrão (RFC 8259) | Não | — | Comentários violam a spec |
| JSONC | Sim | // /* */ |
Dialeto não padrão usado pelo VS Code |
| JSON5 | Sim | // /* */ |
Permite também vírgula final e aspas simples |
| YAML | Sim | # |
Parte da spec, em qualquer parte da linha |
| CSV (RFC 4180) | Não | — | Algumas implementações tratam linhas com # como convenção local |
| Markdown (CommonMark) | Sim | <!-- --> |
Herdado do HTML |
| TOML | Sim | # |
Referência; mesma forma que YAML |
Comentários em JSON surgem com frequência. Não são permitidos no JSON padrão e o JSON.parse lança erro. Veja Dá para escrever comentários em JSON? para as saídas com JSON5 / JSONC / pré-processamento.
Comparação de ecossistema de parsers
Quando você usa a biblioteca padrão de uma linguagem, o que vem incluso?
| Linguagem | JSON | YAML | CSV | Markdown |
|---|---|---|---|---|
| Node.js | JSON.parse nativo |
js-yaml / yaml |
papaparse / csv-parse |
marked / remark |
| Python | json nativo |
PyYAML / ruamel.yaml |
csv nativo / pandas / polars |
markdown / mistune |
| Go | encoding/json nativo |
gopkg.in/yaml.v3 |
encoding/csv nativo |
goldmark |
| Rust | serde_json |
serde_yaml / yaml-rust2 |
crate csv |
pulldown-cmark |
| Java | Jackson / Gson | SnakeYAML | OpenCSV / Apache Commons CSV | flexmark / commonmark-java |
| Navegador (JS puro) | JSON.parse nativo |
js-yaml (CDN) |
papaparse |
marked / markdown-it |
JSON e CSV vêm na biblioteca padrão em quase todo lugar. YAML e Markdown dependem de bibliotecas externas, embora as escolhas de facto sejam estáveis. O FormatArc traz yaml, papaparse, marked, turndown e remark para o bundle do navegador, e é isso que viabiliza a conversão sem servidor.
Matriz de decisão por caso de uso
Nas decisões reais você não pergunta "qual formato lê melhor?", você combina um caso de uso concreto com um formato. Procure a sua linha.
| Caso de uso | Primeira escolha | Alternativa | Evitar |
|---|---|---|---|
| Requisição / resposta de API REST | JSON | (MessagePack / Protobuf) | YAML, CSV, Markdown |
| Resposta GraphQL | JSON | — | Idem |
| Spec OpenAPI / AsyncAPI | YAML (ou JSON) | — | CSV, Markdown |
| Manifests do Kubernetes | YAML | JSON | CSV, Markdown |
| GitHub Actions / CircleCI / GitLab CI | YAML | — | Idem |
| Docker Compose | YAML | — | Idem |
| Configuração de aplicação | YAML / TOML / JSON5 | — | CSV, Markdown |
| Variáveis de ambiente | .env / TOML |
— | YAML (confusão com comentário inline) |
| Logs estruturados | JSON Lines | — | YAML, CSV, Markdown |
| Exportação de métricas em lote | CSV | Parquet | YAML, Markdown |
| Ida e volta com Excel / Sheets | CSV / XLSX | — | YAML, Markdown |
| Importação / exportação de banco | CSV | JSON Lines | YAML, Markdown |
| Frontmatter de artigos em sites estáticos | YAML | TOML / JSON | CSV |
| Corpo de blog técnico / README | Markdown | reStructuredText | JSON, YAML, CSV |
| Documentos de especificação / requisitos | Markdown | — | Idem |
| Rich text em Slack / Discord | Markdown (dialeto) | — | Idem |
| Contexto para ChatGPT, Claude | Markdown | Texto puro | HTML (ver abaixo) |
| Saída estruturada de LLM | JSON | — | YAML (tipagem implícita), Markdown |
| Definição de tools para agentes | JSON | YAML | CSV, Markdown |
| Fonte única de tabela Markdown | CSV → conversão | — | Tabelas Markdown escritas à mão |
| Tabelas em um README | Tabela Markdown (GFM) | — | CSV, HTML |
Escrever tabelas Markdown à mão é chato, então mantenha um CSV ou JSON como fonte e use CSV to Markdown para gerar a tabela. Veja Tabelas em README do GitHub a partir de CSV ou JSON para o fluxo completo.
Escolhas ruins comuns
Padrões que se repetem em times diferentes.
CSV para dados aninhados
Tentar caber { "user": { "address": { "city": "Tokyo" } } } em CSV obriga a inventar uma convenção de achatamento que o consumidor terá que reverter. Se você precisa de aninhamento, use JSON ou YAML, ou divida em um conjunto relacional de CSVs e junte do lado do consumidor.
Cair na tipagem implícita do YAML
O YAML 1.1 convertia no, yes, on, off em booleanos. O famoso "problema da Noruega" é o código de país NO virando silenciosamente false. O YAML 1.2 corrigiu parte disso, mas muitos parsers ainda usam por padrão o modo compatível com 1.1. Coloque entre aspas qualquer string que possa ser confundida com booleano.
country: "NO" # seguro — string explícita
country: NO # pode virar false em um parser compatível com YAML 1.1
Escrever comentários em JSON padrão
O settings.json do VS Code permite comentários, o que leva à suposição de que o JSON padrão também permite. Não permite. O settings.json é JSONC, um dialeto não padrão. O JSON.parse dá erro em qualquer comentário. Se você precisa de comentários, escolha JSON5, JSONC ou YAML, ou remova-os em uma etapa de pré-processamento.
Subestimar a variação de dialetos do CSV
A RFC 4180 é uma referência; o CSV do mundo real é um enxame de dialetos. Delimitadores (, \t ; |), fim de linha (LF vs CRLF), aspas, BOM, encoding de caracteres, presença de cabeçalho e escape de quebras de linha dentro de valores variam de acordo com quem escreveu. "É só CSV" já custou mais horas de debug do que YAML. Verifique os dois lados com uma amostra antes de subir para produção.
Tratar Markdown como formato de dados legível por máquina
Markdown é um formato de documento. As tabelas dele são uma extensão GFM, não fazem parte do CommonMark, e células com pipe ou quebra de linha quebram em renderizadores que não são GFM. Veja Tabela Markdown não renderiza para os modos de falha mais comuns.
Achar que tabelas Markdown são CommonMark
Não são. A sintaxe de tabela é território de GFM, MultiMarkdown ou Pandoc. Um renderizador em modo CommonMark estrito vira sua tabela em um parágrafo feio. GitHub, Dev.to, Zenn e Qiita são amigáveis a GFM; mecanismos de blog antigos e wikis podem não ser. Veja CommonMark vs GFM para o limite.
Escolha para contexto de LLM
Para entrada de ChatGPT, Claude ou Gemini, Markdown é o padrão. Usa aproximadamente de um terço a um décimo dos tokens do HTML equivalente, e benchmarks externos mostram consistentemente maior precisão de extração em tabelas, listas e blocos de código. Para saída estruturada de LLM (function calling, modo JSON), JSON é obrigatório. O padrão assimétrico — Markdown na entrada, JSON na saída — é o que a maioria dos prompts em produção acaba adotando.
YAML é arriscado como entrada de LLM porque a indentação é frágil sob tokenização e a tipagem implícita pode transformar strings em booleanos. Os números em nível de token e o caminho de conversão sem upload estão detalhados em Markdown vs HTML para LLMs.
Specs e história
Tabela de referência para quem decide.
| Formato | Padrão | Primeira versão | Mais recente | MIME type | Extensão |
|---|---|---|---|---|---|
| JSON | RFC 8259 / ECMA-404 | 2006 (RFC 4627) | 2017 (RFC 8259) | application/json |
.json |
| YAML | YAML 1.2.2 | 2004 (YAML 1.0) | 2021 (1.2.2) | application/yaml |
.yaml / .yml |
| CSV | RFC 4180 | Anos 1970 (informal) | 2005 (RFC 4180) | text/csv |
.csv |
| Markdown | CommonMark 0.31 | 2004 (Gruber original) | 2024 (CommonMark 0.31) | text/markdown |
.md / .markdown |
| GFM | GitHub Flavored Markdown | Spec em 2017 | Atualização contínua | text/markdown |
.md |
JSON e CSV têm RFCs estáveis. YAML e Markdown têm famílias de dialetos vivos (YAML 1.1 vs 1.2; CommonMark vs GFM vs MultiMarkdown vs Pandoc). Sempre verifique o dialeto do consumidor quando interoperabilidade importa.
Para os fundamentos de cada formato:
- O que é JSON? — sintaxe e casos de uso
- O que é YAML? — sintaxe e casos de uso
- O que é CSV? — sintaxe e casos de uso
Converta entre formatos com as sete ferramentas do FormatArc
As sete rotas canônicas de conversão entre os quatro formatos vivem no navegador no FormatArc. Nada do que você cola sai da sua aba.
| Rota | Ferramenta | Uso típico |
|---|---|---|
| Formatar e validar JSON | JSON Formatter | Inspecionar respostas de API, corrigir erros |
| YAML para JSON | YAML to JSON | Passar configuração para uma API, processar em CI |
| JSON para YAML | JSON to YAML | Converter resposta de API em arquivo de configuração |
| CSV para JSON | CSV to JSON | Estruturar dados tabulares para uma API |
| CSV para tabela Markdown | CSV to Markdown | Colar uma tabela em um README ou artigo |
| Markdown para HTML | Markdown to HTML | Colar em um CMS que espera HTML |
| HTML para Markdown | HTML to Markdown | Limpar uma página web, preparar contexto LLM |
Encadeadas, você consegue fluxos como "JSON de API para YAML de configuração", "Excel para CSV para tabela Markdown no README", ou "HTML de página web para Markdown para um prompt do ChatGPT" — tudo no navegador.
Resumo
A lista final para quando você precisa escolher rápido.
- Troca de dados entre máquinas: JSON
- Configuração editada à mão: YAML
- Dados tabulares: CSV
- Prosa legível por humanos: Markdown
- Entrada LLM: Markdown; saída LLM: JSON
Não existe formato "certo". Existe o formato que otimiza o que importa pra você — legibilidade, rigor, amplitude de parsers, suporte a comentários, eficiência de tokens em LLM. Use as matrizes acima como tabela de consulta única na próxima vez que iniciar um projeto.
Referências de specs:

