Conversor JSON Lines (JSONL) ⇔ Array JSON

Converte entre o formato JSON Lines (um objeto JSON por linha) e um array JSON padrão. Útil para verificar conjuntos de dados de machine learning e saídas de logs.

O que é JSON Lines (JSONL)

JSON Lines é um formato em que cada linha contém um objeto JSON. O ficheiro no seu conjunto não é JSON, o que significa que não há vírgulas finais para gerir e que acrescentar registos se resume a acrescentar linhas. É muito usado onde os dados fluem um a um: registos de aplicação, conjuntos de treino para aprendizagem automática e carregamentos em massa no BigQuery ou no Elasticsearch. As extensões habituais são `.jsonl` e `.ndjson`.

Esta ferramenta converte entre JSON Lines e um array JSON nos dois sentidos. Ao passar de JSONL para array, as linhas em branco são ignoradas e qualquer linha que não seja JSON válido é reportada. No sentido inverso, a entrada tem de ter um array no nível superior ou a conversão falha. Tudo corre no seu navegador, por isso os registos e os dados de treino que prefere não enviar para lado nenhum ficam na sua máquina.

Como converter entre JSONL e um array JSON

  1. Escolha o sentido De JSONL para array JSON, ou de array JSON para JSONL.
  2. Cole os dados Para JSONL, um objeto por linha. Para um array, cole o texto que começa por `[` tal como está.
  3. Se surgir um erro, veja essa linha A mensagem identifica que linha não pôde ser analisada. Uma vírgula final ou uma aspa por fechar são as causas habituais.
  4. Copie o resultado Guarde a saída num ficheiro ou entregue-a diretamente ao passo seguinte do seu processo.

Dicas para aproveitar melhor

  • JSON Lines (JSONL) é um formato que coloca um objeto JSON independente por linha, usado como padrão em conjuntos de dados de fine-tuning da OpenAI e na saída de logs de ferramentas como Elasticsearch/Logstash.
  • No modo "JSONL → Array JSON", cada linha precisa ser um objeto JSON que possa ser interpretado individualmente. Linhas em branco são ignoradas automaticamente.
  • No modo "Array JSON → JSONL", toda a entrada precisa ser um único array JSON (`[ ... ]`). Cada elemento do array é gerado como uma linha de JSONL.
  • Ao converter um arquivo de log grande de JSONL para um array JSON, fica mais fácil trabalhar com ele usando o comando `jq` ou o analisador de array JSON padrão da sua linguagem de programação.

Onde esta conversão ajuda

Entregar registos a uma ferramenta de análise

Registos de aplicação escritos um por linha tornam-se utilizáveis por ferramentas e bibliotecas orientadas a arrays depois de reunidos num array JSON.

Preparar dados de aprendizagem automática

Os conjuntos de treino costumam ser distribuídos como JSONL enquanto os scripts de pré-processamento esperam um array. Isto faz a ponte entre os dois.

Carregar no BigQuery ou no Elasticsearch

Ambos aceitam JSON delimitado por mudanças de linha como formato de entrada, por isso um array que já tenha pode ser convertido em algo que consigam ingerir.

Tornar um JSON grande tratável linha a linha

Um array tem de ser lido por inteiro antes de o processamento começar; como JSONL pode ser tratado uma linha de cada vez.

Termos do JSON Lines

JSON Lines (JSONL)
Um formato com um valor JSON por linha. **O ficheiro no seu conjunto não é JSON válido**, porque vários valores ficam lado a lado. A sua vantagem é que cada linha pode ser lida de forma independente.
NDJSON
Abreviatura de Newline Delimited JSON, essencialmente o mesmo que JSON Lines. Daí vem a extensão `.ndjson`.
Processamento em fluxo
Tratar os dados desde o início à medida que chegam, sem os carregar por completo antes. O JSONL encaixa nesta abordagem, e por isso os dois costumam andar juntos.
Nível superior
O valor mais exterior de um documento JSON. Converter para JSONL exige um array `[...]` aqui; um objeto `{...}` não pode ser convertido.
Linhas em branco
Em JSONL as linhas em branco não significam nada. Esta ferramenta ignora-as, por isso uma mudança de linha solta no fim de um ficheiro não estraga a conversão.

Perguntas frequentes

Um array JSON envolve tudo em um único array, como `[ {...}, {...} ]`, então não é possível acessar um elemento individual sem interpretar o conjunto inteiro. Já o JSON Lines coloca um objeto JSON independente por linha, permitindo o processamento em streaming linha a linha, o que o torna adequado para o processamento sequencial de arquivos de log enormes ou conjuntos de dados de machine learning.

É o formato padrão de conjuntos de dados de fine-tuning na OpenAI e em outras plataformas de machine learning, o formato de saída de ferramentas de coleta de logs como Elasticsearch e Logstash, e o processamento em streaming de grandes volumes de dados — qualquer cenário em que os registros precisem ser lidos e gravados de forma independente, um a um.

No modo "JSONL → Array JSON", cada linha precisa ser um JSON válido por si só; se mesmo uma única linha tiver um erro de sintaxe, é exibida uma mensagem de erro com o número dessa linha. No modo "Array JSON → JSONL", toda a entrada precisa ser um array (começando com `[` e terminando com `]`).

O resultado convertido para um array JSON pode ser usado diretamente com o comando `jq` ou com o analisador JSON padrão da sua linguagem de programação. Por outro lado, o resultado convertido para JSONL combina bem com `jq -c`, `grep`, `awk` e outras ferramentas orientadas a linhas, facilitando sua integração em um pipeline de análise de logs.
Tool-kun

Curiosidade — Por que surgiu o formato de "um registro por linha"

O formato JSON Lines (também chamado de JSONL) surgiu porque um array JSON padrão tem uma limitação fundamental: não é possível obter nem um único registro até que o array inteiro tenha sido carregado na memória e totalmente interpretado. Tentar tratar dados de log ou conjuntos de treinamento de machine learning com milhões de linhas como um único array JSON exigia carregar o arquivo inteiro na memória, o que causava falta de memória e tempos de interpretação enormes em arquivos muito grandes.

O JSON Lines resolve esse problema com uma regra simples: uma linha equivale a um objeto JSON completo. Como o arquivo pode ser lido e interpretado linha a linha à medida que avança, não é necessário carregá-lo inteiro na memória, o que o torna muito adequado para processamento em streaming e paralelo. Essa filosofia de design também se encaixa bem com a tradição Unix de tratar texto como "um registro por linha" (comandos como `grep`, `awk` e `sed` operam linha a linha), o que representa uma grande vantagem prática, já que se integra diretamente às ferramentas de linha de comando já existentes.

Hoje em dia, é amplamente adotado como formato de distribuição de conjuntos de dados na área de IA e machine learning, sendo comum que dados de treinamento de grandes modelos de linguagem e pares de prompt/resposta para fine-tuning sejam distribuídos no formato JSON Lines.