JSON vs JSONL: Qual é a diferença?
Um guia completo para entender os formatos JSON e JSONL (JSON Lines), suas diferenças e quando usar cada um.
Última atualização: fevereiro de 2026
Comparação rápida
| Recurso | JSON | JSONL (JSON Lines) |
|---|---|---|
| Estrutura | Um único objeto ou array | Um objeto JSON por linha |
| Extensão do arquivo | .json | .jsonl ou .ndjson |
| Análise | Deve analisar o arquivo inteiro | Pode analisar linha por linha |
| Streaming | Difícil | Suporte nativo |
| Arquivos grandes | Alto consumo de memória | Eficiente em memória |
| Legibilidade | Formatado com indentação | Compacto, um registro por linha |
| Validação de esquema | JSON Schema compatível | JSON Schema por linha |
| Adicionar dados | Deve reescrever o arquivo inteiro | Simplesmente adicionar uma nova linha |
O que é JSON?
JSON (JavaScript Object Notation) é um formato leve de intercâmbio de dados que é fácil de ler e escrever para humanos, e fácil de analisar e gerar para máquinas. Baseia-se em um subconjunto de JavaScript e tornou-se o padrão de facto para troca de dados na web.
Um arquivo JSON contém um único valor JSON — geralmente um objeto ou um array. O arquivo inteiro deve ser analisado como uma unidade para acessar qualquer dado dentro dele.
[{"name": "Alice", "age": 30, "city": "New York"},{"name": "Bob", "age": 25, "city": "London"},{"name": "Charlie", "age": 35, "city": "Tokyo"}]
O que é JSONL (JSON Lines)?
JSONL (JSON Lines), também conhecido como Newline Delimited JSON (NDJSON), é um formato de texto onde cada linha é um objeto JSON válido. As linhas são separadas por caracteres de nova linha (\n). Diferente do JSON padrão, não há um array ou objeto envolvente ao redor dos dados.
Cada linha em um arquivo JSONL é independente e pode ser analisada individualmente. Isso torna o JSONL ideal para streaming de dados, arquivos de log e processamento de grandes conjuntos de dados sem carregar tudo na memória.
{"name": "Alice", "age": 30, "city": "New York"}{"name": "Bob", "age": 25, "city": "London"}{"name": "Charlie", "age": 35, "city": "Tokyo"}
Principais diferenças entre JSON e JSONL
1. Formato e estrutura do arquivo
JSON envolve todos os dados em um único objeto ou array. O arquivo deve ser sintaticamente válido como um todo — um colchete faltante no final invalida o arquivo inteiro.
JSONL armazena um objeto JSON por linha. Cada linha é independente — se uma linha tem um erro, as outras linhas ainda podem ser analisadas.
2. Análise e uso de memória
JSON requer carregar e analisar o arquivo inteiro de uma vez. Um arquivo JSON de 1 GB precisaria de aproximadamente 1 GB ou mais de memória para ser analisado.
JSONL pode ser lido e analisado linha por linha (streaming). Mesmo um arquivo JSONL de 10 GB pode ser processado com uso mínimo de memória lendo uma linha por vez.
3. Streaming e dados em tempo real
JSON não foi projetado para streaming. Você não pode começar a processar dados até que o arquivo ou resposta completa seja recebido e analisado.
JSONL é ideal para streaming. Cada linha pode ser processada assim que é recebida, tornando-o perfeito para fluxos de dados em tempo real, logs e eventos enviados pelo servidor.
4. Adicionar e gravar dados
Adicionar dados a um array JSON requer ler o arquivo inteiro, analisá-lo, adicionar o novo elemento e reescrever o arquivo completo.
Adicionar dados a um arquivo JSONL é tão simples quanto acrescentar uma nova linha no final. Não é necessário ler ou modificar os dados existentes. Isso é O(1) contra O(n) para JSON.
5. Legibilidade humana
JSON suporta formatação com indentação, tornando-o muito legível para arquivos de configuração e respostas de API.
JSONL é compacto por design — um registro por linha. É otimizado para processamento por máquinas em vez de leitura humana, embora linhas individuais possam ser formatadas.
Quando usar JSON vs JSONL
- Trabalhar com arquivos de configuração
- Construir corpos de requisição/resposta de API REST
- Armazenar dados estruturados pequenos (menos de 10 MB)
- Os dados precisam ser legíveis e editáveis por humanos
- Trabalhar com estruturas de dados hierárquicas aninhadas
- Troca de dados no lado do navegador
- Processar grandes conjuntos de dados (mais de 100 MB)
- Transmitir dados em tempo real
- Escrever arquivos de log e dados de eventos
- Treinar modelos de aprendizado de máquina (OpenAI, Hugging Face)
- Pipelines ETL e processamento de dados
- Adicionar dados com frequência
- Processar dados com ferramentas Unix (grep, awk, sed)
Casos de uso comuns
Aprendizado de máquina e IA
JSONLJSONL é o formato padrão para dados de treinamento de ML. OpenAI usa JSONL para conjuntos de dados de ajuste fino, e muitos frameworks de ML esperam entrada em JSONL. Cada linha representa um exemplo de treinamento.
Log de aplicações
JSONLLogs de servidor, eventos de aplicação e trilhas de auditoria são naturalmente adequados para JSONL. Cada evento é escrito como uma única linha, facilitando adicionar, buscar com grep e processar com ferramentas de streaming.
APIs web e configuração
JSONAPIs REST geralmente usam JSON para corpos de requisição e resposta. Arquivos de configuração (.json) usam JSON para configurações legíveis e estruturadas com objetos aninhados.
Big Data e análise
JSONLPipelines de dados, processos ETL e ferramentas de análise usam JSONL para processar grandes volumes de dados. Cada registro pode ser processado independentemente, permitindo processamento paralelo e padrões MapReduce.
Exemplos de código
// Reading JSON - must load entire fileconst data = JSON.parse(fs.readFileSync('data.json', 'utf8'));// Access datadata.forEach(item => {console.log(item.name);});
// Reading JSONL - stream line by lineimport { createReadStream } from 'fs';import { createInterface } from 'readline';const rl = createInterface({input: createReadStream('data.jsonl')});for await (const line of rl) {const item = JSON.parse(line);console.log(item.name);}
// JSON array to JSONLconst jsonArray = JSON.parse(fs.readFileSync('data.json', 'utf8'));const jsonl = jsonArray.map(item => JSON.stringify(item)).join('\n');fs.writeFileSync('data.jsonl', jsonl);
// JSONL to JSON arrayconst lines = fs.readFileSync('data.jsonl', 'utf8').split('\n').filter(line => line.trim());const jsonArray = lines.map(line => JSON.parse(line));fs.writeFileSync('data.json', JSON.stringify(jsonArray, null, 2));
Converter JSON e JSONL online
Use nossas ferramentas online gratuitas para converter entre formatos JSON e JSONL instantaneamente — sem instalação.