JSONL em Python: Ler, Escrever e Parsear
Um guia completo para trabalhar com arquivos JSONL (JSON Lines) em Python. Aprenda a ler, escrever, parsear e transmitir dados JSONL usando módulos integrados, pandas e bibliotecas de alto desempenho.
Última atualização: fevereiro de 2026
Por que Python para JSONL?
Python é a linguagem mais popular para trabalhar com arquivos JSONL, e com razão. Seu módulo json integrado lida com o parseamento JSON nativamente, a iteração de arquivos é eficiente em memória por padrão, e o ecossistema oferece bibliotecas poderosas como pandas e orjson para workflows especializados. Seja processando datasets de aprendizado de máquina, logs de aplicação ou respostas de API, Python torna o manuseio de JSONL simples.
JSONL (JSON Lines) armazena um objeto JSON por linha, tornando-o ideal para streaming, logging de append-only e processamento de grandes datasets sem carregar tudo na memória. A leitura linha por linha de arquivos do Python se alinha perfeitamente com este formato. Neste guia, você aprenderá três abordagens para ler JSONL, duas abordagens para escrevê-lo, e como lidar com arquivos grandes demais para caber na memória.
Lendo Arquivos JSONL em Python
Existem várias maneiras de ler arquivos JSONL em Python, cada uma adequada para diferentes casos de uso. O módulo json padrão funciona para a maioria dos cenários, pandas é conveniente para análise tabular, e generators são melhores para arquivos grandes.
A abordagem mais simples usa o módulo json integrado do Python. Abra o arquivo, itere linha por linha e parseia cada linha com json.loads(). Isso carrega todos os registros em uma lista na memória.
import jsonrecords = []with open('data.jsonl', 'r', encoding='utf-8') as f:for line in f:line = line.strip()if line: # Skip empty linesrecords.append(json.loads(line))print(f'Loaded {len(records)} records')print(records[0])
Se seus dados JSONL são tabulares (mesmas chaves em cada registro), pandas pode lê-los diretamente em um DataFrame com uma única chamada de função. Esta é a maneira mais rápida de começar a analisar dados JSONL estruturados.
import pandas as pd# Read entire file into a DataFramedf = pd.read_json('data.jsonl', lines=True)print(df.head())print(f'Shape: {df.shape}')# For large files, read in chunkschunks = pd.read_json('large.jsonl', lines=True, chunksize=10000)for chunk in chunks:# Process each chunk (DataFrame)print(f'Chunk shape: {chunk.shape}')
Para arquivos grandes demais para caber na memória, use uma função generator. Isso retorna um registro por vez, mantendo o uso de memória constante independentemente do tamanho do arquivo. Este é o padrão recomendado para pipelines de dados em produção.
import jsonfrom typing import Iterator, Anydef read_jsonl(path: str) -> Iterator[dict[str, Any]]:"""Read a JSONL file lazily, yielding one record at a time."""with open(path, 'r', encoding='utf-8') as f:for line_num, line in enumerate(f, 1):line = line.strip()if not line:continuetry:yield json.loads(line)except json.JSONDecodeError as e:print(f'Skipping invalid JSON at line {line_num}: {e}')# Process records one at a timefor record in read_jsonl('large_data.jsonl'):process(record) # Only one record in memory at a time
Escrevendo Arquivos JSONL em Python
Escrever arquivos JSONL é direto: serialize cada registro como uma string JSON e adicione um caractere de nova linha. A regra principal é um objeto JSON por linha, sem vírgulas finais ou array envolvente.
Use json.dumps() para serializar cada registro, depois escreva seguido de uma nova linha. Defina ensure_ascii=False para preservar caracteres Unicode como chinês, japonês ou emoji na saída.
import jsonrecords = [{"id": 1, "name": "Alice", "age": 30},{"id": 2, "name": "Bob", "age": 25},{"id": 3, "name": "Charlie", "age": 35},]with open('output.jsonl', 'w', encoding='utf-8') as f:for record in records:f.write(json.dumps(record, ensure_ascii=False) + '\n')print(f'Wrote {len(records)} records to output.jsonl')
Se seus dados já estão em um DataFrame do pandas, use to_json() com orient='records' e lines=True para exportá-lo diretamente como JSONL. Esta é a operação inversa de pd.read_json() com lines=True.
import pandas as pddf = pd.DataFrame([{"id": 1, "name": "Alice", "age": 30},{"id": 2, "name": "Bob", "age": 25},{"id": 3, "name": "Charlie", "age": 35},])# Write DataFrame to JSONLdf.to_json('output.jsonl', orient='records', lines=True, force_ascii=False)print(f'Wrote {len(df)} records to output.jsonl')
Bibliotecas Python para JSONL
Python oferece várias bibliotecas de parseamento JSON com diferentes características de desempenho. Escolher a correta depende do tamanho do seu arquivo e dos requisitos de desempenho.
json (stdlib)
IntegradoO módulo json integrado do Python não requer instalação e funciona em qualquer lugar. É suficiente para a maioria dos workloads JSONL e suporta todos os tipos JSON padrão. O desempenho é adequado para arquivos de até algumas centenas de MB.
orjson
Mais rápidoorjson é a biblioteca JSON mais rápida para Python, escrita em Rust. Oferece parseamento e serialização 2-10x mais rápidos em comparação com o módulo json padrão. Retorna bytes em vez de strings e suporta nativamente dataclasses, datetime, numpy e tipos UUID.
ujson
Rápidoujson (UltraJSON) é uma biblioteca JSON baseada em C que é 2-5x mais rápida que o módulo json padrão. Sua API é quase idêntica ao módulo json integrado, tornando-a uma substituição direta. Um bom meio-termo entre compatibilidade e velocidade.
Streaming de Arquivos JSONL Grandes
Ao processar arquivos JSONL com gigabytes de tamanho, você precisa de uma abordagem de streaming que lê, transforma e escreve dados em lotes. Isso mantém o uso de memória constante e fornece acompanhamento de progresso.
import jsonimport sysdef process_large_jsonl(input_path: str,output_path: str,batch_size: int = 1000) -> int:"""Stream-process a large JSONL file in batches."""processed = 0batch: list[dict] = []with open(input_path, 'r') as fin, \open(output_path, 'w') as fout:for line in fin:line = line.strip()if not line:continuerecord = json.loads(line)# Transform the recordrecord['processed'] = Truebatch.append(record)if len(batch) >= batch_size:for r in batch:fout.write(json.dumps(r) + '\n')processed += len(batch)batch.clear()print(f'\rProcessed {processed} records...', end='')# Write remaining recordsfor r in batch:fout.write(json.dumps(r) + '\n')processed += len(batch)print(f'\nDone. Processed {processed} records total.')return processed# Usageprocess_large_jsonl('input.jsonl', 'output.jsonl', batch_size=5000)
Este padrão usa memória constante processando registros em lotes de tamanho fixo. O parâmetro batch_size controla o equilíbrio entre uso de memória e eficiência de I/O. Para a maioria dos sistemas, lotes de 1.000 a 10.000 registros funcionam bem. O indicador de progresso ajuda a monitorar tarefas de longa duração.
Experimente Nossas Ferramentas JSONL Gratuitas
Não quer escrever código? Use nossas ferramentas online gratuitas para visualizar, validar e converter arquivos JSONL diretamente no seu navegador.