Módulo 7 - Trabalhando com JSON
De Python para JSON com json.dumps
11 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026
O que você vai aprender
- Converter dicionários e listas do Python em texto JSON com json.dumps.
- Formatar a saída com o argumento indent para ficar legível.
- Usar ensure_ascii=False para manter acentos e caracteres em português.
- Saber qual tipo do Python vira qual tipo do JSON.
Ouvir o resumo desta aula
Um recap de cerca de 2 minutos na voz do Valim, para ouvir no trânsito ou na academia.
Ler a transcrição do resumo
Resumo da aula: De Python para JSON com json.dumps.
Os objetivos desta aula. Converter dicionários e listas do Python em texto JSON com json.dumps. Formatar a saída com o argumento indent para ficar legível. Usar ensure_ascii=False para manter acentos e caracteres em português. Saber qual tipo do Python vira qual tipo do JSON.
Veja o essencial, parte por parte.
O primeiro json.dumps. json.dumps(dados) transforma um dicionário ou lista do Python em texto JSON.
Deixando legível: indent e ensure_ascii. indent=2 para ler com conforto; sem ele, tudo sai em uma linha.
Qual tipo do Python vira o quê no JSON. A conversão de tipos segue uma tabela fixa, e vale conhecê-la para não se surpreender.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
O primeiro json.dumps
Converter dados do Python em JSON é o primeiro passo para salvar em arquivo ou enviar pela rede. A função que faz isso é json.dumps. Você entrega um objeto Python e recebe de volta uma string com o mesmo conteúdo escrito no formato JSON. Comece importando o módulo e convertendo um dicionário simples. Observe que o resultado é uma string, mesmo que se pareça com o dicionário original.
import json
pessoa = {"nome": "João", "idade": 34, "assinante": True}
texto = json.dumps(pessoa)
print(texto)
# {"nome": "Jo\u00e3o", "idade": 34, "assinante": true}
print(type(texto))
# <class 'str'>json.dumps devolve uma string. Note que True virou true e o acento saiu escapado.
Duas coisas chamam a atenção nesse resultado. Primeiro, o True do Python virou true em minúsculas, que é a forma do JSON: a tradução dos tipos acontece sozinha. Segundo, o João apareceu como Jo\u00e3o. Isso não está errado, é só o jeito padrão de escapar acentos, mas fica ilegível. As próximas duas partes resolvem a legibilidade: uma cuida da indentação, a outra dos acentos.
Deixando legível: indent e ensure_ascii
Por padrão, json.dumps espreme tudo em uma linha só, o que é ótimo para a máquina e ruim para os olhos. O argumento indent resolve: passe indent=2 e o JSON ganha quebras de linha e recuo de dois espaços por nível. Junte com ensure_ascii=False para manter os acentos legíveis. Essa dupla é a receita padrão sempre que você quer inspecionar ou salvar um JSON em português.
import json
pessoa = {
"nome": "João",
"cidade": "São Paulo",
"idade": 34,
"cursos": ["Python básico", "Python intermediário"],
}
texto = json.dumps(pessoa, indent=2, ensure_ascii=False)
print(texto)
# {
# "nome": "João",
# "cidade": "São Paulo",
# "idade": 34,
# "cursos": [
# "Python básico",
# "Python intermediário"
# ]
# }Com indent=2 e ensure_ascii=False, o JSON fica indentado e com acentos preservados.
Vale entender por que o ensure_ascii existe. Nos primórdios, nem todo sistema lidava bem com acentos, então o padrão foi jogar pelo seguro e escapar tudo para caracteres ASCII simples. Hoje, com tudo em UTF-8, isso raramente é necessário e só atrapalha a leitura. Por isso, na prática do dia a dia com texto em português, ensure_ascii=False é quase sempre a escolha certa. O JSON gerado continua válido dos dois jeitos.
Qual tipo do Python vira o quê no JSON
A conversão de tipos segue uma tabela fixa, e vale conhecê-la para não se surpreender. Dicionário vira objeto, lista e tupla viram array, str vira texto, int e float viram número, True e False viram true e false, e None vira null. Repare que a tupla vira array e não volta como tupla: ela perde a identidade de tupla no caminho de ida. Tipos sem equivalente, como conjuntos, dão erro e precisam ser convertidos antes.
| Tipo no Python | Vira no JSON | Observação |
|---|---|---|
| dict | objeto (chaves e valores) | As chaves viram texto |
| list e tuple | array (lista) | A tupla não volta como tupla |
| str | texto entre aspas | Sempre aspas duplas |
| int e float | número | Sem aspas |
| True e False | true e false | Em minúsculas |
| None | null | Ausência de valor |
A tradução de tipos que json.dumps aplica automaticamente.
import json
dados = {
"texto": "olá",
"inteiro": 10,
"decimal": 3.5,
"verdadeiro": True,
"vazio": None,
"lista": [1, 2],
"tupla": (3, 4),
}
print(json.dumps(dados, ensure_ascii=False))
# {"texto": "olá", "inteiro": 10, "decimal": 3.5, "verdadeiro": true, "vazio": null, "lista": [1, 2], "tupla": [3, 4]}Todos os tipos básicos convertidos de uma vez. A tupla (3, 4) virou o array [3, 4].
Teste rápido
Você converte um dicionário com o nome "São Paulo" e o resultado mostra "S\u00e3o Paulo". O que faltou?
Perguntas frequentes
- Qual a diferença entre json.dumps e json.dump?
- O dumps, com s de string, devolve o JSON como texto para você usar ou imprimir. O dump, sem o s, grava o JSON direto em um arquivo aberto. Nesta aula você usa dumps para ver o resultado; a aula sobre arquivos apresenta o dump para salvar em disco.
- Preciso sempre usar o indent?
- Não. O indent serve para deixar o JSON legível por humanos, o que é útil em arquivos de configuração ou quando você quer inspecionar o conteúdo. Se o JSON só será lido por outro programa, dá para dispensar o indent e economizar espaço, já que o resultado fica em uma linha só.
- O ensure_ascii=False deixa o JSON inválido?
- Não. O JSON continua totalmente válido com acentos, desde que o texto seja salvo em UTF-8, que é o padrão. O ensure_ascii=False só decide se os acentos aparecem legíveis ou escapados como \uXXXX; as duas formas representam o mesmo dado.
- Por que minha tupla virou uma lista no JSON?
- Porque o JSON não tem o conceito de tupla; ele só tem array. Então json.dumps converte a tupla em array, que ao voltar para o Python vira lista. Se você precisa de uma tupla depois de ler o JSON, converta a lista em tupla no seu código após carregar os dados.
- O que acontece se eu tentar converter um conjunto (set)?
- Dá erro, porque o conjunto não tem equivalente em JSON. A solução é converter o conjunto em lista antes, com list(meu_conjunto), e então passar para json.dumps. O mesmo vale para outros tipos sem correspondência direta, como datas, que você transforma em texto.
- Posso ordenar as chaves do JSON gerado?
- Sim. Passe sort_keys=True para json.dumps e as chaves de cada objeto saem em ordem alfabética. Isso é útil quando você quer resultados previsíveis, por exemplo para comparar dois JSON ou versionar um arquivo de configuração sem ruído de ordem.
Fontes
Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.