Como ler e analisar um arquivo JSON em Python

Aprenda como ler, analisar e carregar arquivos JSON em Python usando o módulo json integrado. Domine a conversão de strings JSON em dicionários e vice-versa.

Experimente esta solução no Editor

Visão geral

JSON (JavaScript Object Notation) é o formato de dados mais popular para APIs, arquivos de configuração e armazenamento de dados. Python vem com um módulo `json` integrado que torna incrivelmente simples ler, analisar e gravar dados JSON. Como os objetos JSON são mapeados perfeitamente para dicionários Python e as matrizes JSON são mapeadas para listas Python, trabalhar com JSON parece nativo.

Para ler JSON de um arquivo externo, você usa a função `json.load()`, que analisa um fluxo de arquivo e traduz as estruturas JSON em tipos de dados Python. Se os dados JSON já estiverem carregados na memória como uma string, você usa a função `json.loads()` (o 's' significa string). Selecionar a função correta evita travamentos do analisador.

Ao trabalhar com JSON, é uma prática recomendada lidar com erros de codificação e possíveis erros de formatação. Usar `encoding="utf-8"` na instrução `open()` protege seu script contra falhas em caracteres especiais. O agrupamento de operações de arquivo em um bloco `try-except` que captura `json.JSONDecodeError` garante que seu aplicativo seja degradado normalmente se o arquivo JSON estiver malformado.

Saída de código e execução

Este código demonstra a gravação de um arquivo JSON de amostra, a leitura e análise dele em um dicionário Python e o tratamento de uma string JSON.

import json

# Let's write a mock JSON file first
sample_data = {
    "user": "developer123",
    "skills": ["python", "javascript", "sql"],
    "active": True
}
with open("data.json", "w", encoding="utf-8") as f:
    json.dump(sample_data, f, indent=4)

# 1. Reading from a JSON file (using json.load)
with open("data.json", "r", encoding="utf-8") as file:
    data_from_file = json.load(file)
    print("File Content type:", type(data_from_file).__name__)
    print("User skill list:", data_from_file["skills"])

# 2. Reading from a JSON string (using json.loads)
json_string = '{"host": "localhost", "port": 5432, "ssl": false}'
data_from_str = json.loads(json_string)
print("\nString Content type:", type(data_from_str).__name__)
print("Database host:", data_from_str["host"])
Saída terminal
File Content type: dict
User skill list: ['python', 'javascript', 'sql']

String Content type: dict
Database host: localhost

Implementação passo a passo

  • Importe o módulo json integrado em seu script.
  • Abra o arquivo JSON usando open("filename.json", "r", encoding="utf-8") como arquivo.
  • Passe o objeto file para json.load(file) para analisar o conteúdo em um dicionário Python.
  • Use json.loads(string_data) se precisar analisar uma string JSON bruta já carregada na memória.

Perguntas frequentes

Qual é a diferença entre json.load() e json.loads()?

json.load() aceita um objeto de fluxo semelhante a um arquivo (leitura do disco), enquanto json.loads() aceita uma string padrão ou objeto de bytes contendo conteúdo JSON (leitura da memória).

Como lidar com erros de serialização JSON para classes personalizadas?

O módulo json do Python não pode serializar instâncias de classes personalizadas por padrão. Você deve fornecer uma classe de codificador personalizada estendendo json.JSONEncoder ou extrair os atributos da instância em um dicionário usando primeiro um método auxiliar.

Tópicos Relacionados

Recursos Python recomendados

Expanda seu conhecimento com tutoriais interativos relacionados, folhas de dicas e comparações de código.