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.

Dicas de uso

  • 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.

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.
ツールくん

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.