Python: Processamento de Dados JSON
Última atualização: 2026-09-22
JSON (JavaScript Object Notation) é o formato de intercâmbio de dados mais comum na web. Quase todas as APIs Web retornam dados JSON. O módulo
jsondo Python torna fácil converter entre objetos Python e strings JSON.
1. Objetos Python <-> Strings JSON
▶ Exemplo: Serializando para String JSON
▶ ExperimenteSaída:
# Executed successfully
Saída:
{
"name": "João Silva",
"age": 25,
"is_student": false,
"scores": [85, 92, 78],
"address": null
}
ensure_ascii=False é importante: Sem este parâmetro, caracteres não-ASCII são escapados para códigos Unicode. Use-o para preservar caracteres originais. indent=2 formata a saída para legibilidade. Em produção, use indent=None para comprimir em uma única linha, economizando largura de banda.
2. String JSON -> Objetos Python (Desserialização)
▶ Exemplo: Desserializando uma String JSON
▶ ExperimenteSaída:
# Executed successfully
(1) Mapeamento de Tipo JSON para Tipo Python
| JSON | Python |
|---|---|
string |
str |
number |
int / float |
boolean |
bool |
null |
None |
array |
list |
object |
dict |
3. E/S de Arquivo JSON
▶ Exemplo: Lendo e Escrevendo Arquivos JSON
import json
# Escrever em arquivo JSON
data = {
"students": [
{"name": "João Silva", "age": 20, "score": 85},
{"name": "Maria Souza", "age": 21, "score": 92},
{"name": "Pedro Santos", "age": 19, "score": 78}
]
}
with open("alunos.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
# Ler arquivo JSON
with open("alunos.json", "r", encoding="utf-8") as f:
loaded = json.load(f)
print(f"Número de alunos: {len(loaded['students'])}")
for s in loaded["students"]:
print(f" {s['name']}: {s['score']}")
▶ Exemplo: Persistência de Dados (Dificuldade ⭐⭐)
▶ ExperimenteSaída:
Nenhuma nota ainda
4. Lidando com Tipos de Dados Complexos
Por padrão, o módulo json só suporta tipos básicos. Objetos personalizados precisam de conversão manual:
▶ Exemplo: Serialização Personalizada
▶ ExperimenteSaída:
# Function defined successfully
5. Casos de Uso Comuns
- Dados de API web: Envie e receba dados JSON ao chamar APIs externas.
- Arquivos de configuração: Armazene configuração em formato JSON — mais flexível que INI.
- Persistência de dados: Salve dados do programa como arquivos JSON — mais estruturados que CSV (suporta aninhamento).
- Intercâmbio de dados: Transfira dados entre diferentes linguagens e sistemas.
❓ Perguntas Frequentes
json.dumps() e json.dump()?dumps() retorna uma string JSON (s de string); dump() escreve diretamente em um objeto de arquivo. Similarmente, loads() analisa a partir de uma string; load() lê de um objeto de arquivo. O sufixo 's' indica string.ensure_ascii=False não for definido?\uXXXX. A funcionalidade do programa não é afetada — json.loads() os restaurará automaticamente. No entanto, para legibilidade humana, conteúdo escapado é completamente ilegível. Adicione ensure_ascii=False quando precisar visualizar arquivos JSON manualmente.📖 Resumo
json.dumps()Python -> string JSON;json.loads()string JSON -> Pythonjson.dump()Python -> arquivo JSON;json.load()arquivo JSON -> Pythonensure_ascii=Falsepreserva caracteres não-ASCII;indent=2formata a saída- Mapeamento de tipos JSON:
object->dict,array->list,number->int/float,null->None - Tipos personalizados precisam de uma função de serialização
default
📝 Exercícios
-
Iniciante (Dificuldade ⭐): Crie um dicionário contendo seu nome, idade e três hobbies (lista). Use
json.dumps()para exibir uma string JSON formatada (preserve caracteres, indentação 2). -
Intermediário (Dificuldade ⭐⭐): Escreva duas funções:
save_contacts(contacts)eload_contacts(). Salve uma lista de contatos (lista de dicts) emcontacts.jsone carregue automaticamente na inicialização do programa. Cada contato tem nome, telefone e email. -
Avançado (Dificuldade ⭐⭐⭐): Implemente um "exportador de dados simples" usando JSON. Dada uma lista de notas de alunos
students = [{"name": "João Silva", "scores": {"Português": 85, "Matemática": 92}}], exiba como: 1) Um arquivo JSON formatado; 2) Uma string JSON comprimida (sem indentação); 3) Uma string JSON com chaves ordenadas (sort_keys=True).