Módulo 7 - Trabalhando com JSON

Prática: um catálogo de produtos em JSON

11 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026

O que você vai aprender

  • Montar um catálogo de produtos como lista de dicionários.
  • Salvar o catálogo em produtos.json com acentos preservados.
  • Ler o arquivo de volta e confirmar que os dados voltam intactos.
  • Filtrar produtos por preço percorrendo a lista carregada.

Lendo de volta e filtrando por preço

Agora leia o arquivo de volta e faça algo útil com ele: liste só os produtos abaixo de um preço. Você carrega o catálogo com json.load, percorre a lista e usa uma condição para selecionar os produtos baratos. Esse é o tipo de filtragem que aparece o tempo todo em programas que lidam com listas de dados. Confira que os acentos voltaram intactos, prova de que o ciclo de gravar e ler preservou tudo.

import json

with open("produtos.json", "r", encoding="utf-8") as arquivo:
    catalogo = json.load(arquivo)

limite = 50.0
print(f"Produtos até R$ {limite:.2f}:")

for produto in catalogo:
    if produto["preco"] <= limite:
        print(f"- {produto['nome']}: R$ {produto['preco']:.2f}")
# Produtos até R$ 50.00:
# - Caderno universitário: R$ 24.90
# - Caneta gel: R$ 6.50

json.load recupera o catálogo; o laço com if filtra os produtos dentro do limite de preço.

Vale experimentar variações para fixar. Mude o limite de preço e rode de novo. Filtre por categoria em vez de preço, trocando a condição para produto["categoria"] == "Papelaria". Some o preço de todos os produtos, como você fez na aula de dados aninhados. Cada variação usa as mesmas peças: carregar o JSON, percorrer a lista, aplicar uma condição. Esse trio é a base de quase todo programa que consome dados salvos em JSON.

O que você construiu e para onde vai

Pare um instante para ver o tamanho do que você acabou de fazer. Você criou dados estruturados, salvou em um arquivo real com acentos corretos, recuperou esses dados em outra execução e extraiu deles a informação que interessava. Esse é o ciclo de vida de dados em quase todo programa útil: entra, é guardado, sai e é processado. Um catálogo de produtos, uma lista de contatos, um registro de despesas, tudo segue esse mesmo desenho.

Etapa da práticaFunção usadaO que garantiu os acentos
Montar o catálogoLista de dicionáriosTexto em Unicode do Python
Salvar em arquivojson.dumpencoding utf-8 e ensure_ascii=False
Ler de voltajson.loadencoding utf-8 na abertura
Filtrar por preçolaço com ifDados já em memória, intactos

As quatro etapas do exercício e o que preservou os acentos em cada uma.

Daqui, você já pode aplicar o JSON em projetos de verdade: guardar as configurações de um programa, salvar o progresso de um jogo, consumir dados de uma API pública. O próximo módulo do curso trata de outro formato tabular muito comum, o CSV, que brilha em planilhas e relatórios. Juntos, JSON e CSV cobrem a imensa maioria das necessidades de ler e gravar dados que você vai encontrar pela frente.

Teste rápido

Na prática do catálogo, por que os acentos de Acessórios e Eletrônicos apareceram corretos no arquivo e na leitura?

Perguntas frequentes

Por que o catálogo é uma lista e não um dicionário?
Porque são vários produtos parecidos, sem uma chave única óbvia para cada um. Uma lista percorre bem itens semelhantes com um laço. Se cada produto tivesse um código único, um dicionário com esse código como chave também funcionaria. Para catálogos, a lista de dicionários é o formato mais natural.
Como eu adicionaria um produto novo ao catálogo salvo?
Você lê o arquivo com json.load, faz catalogo.append(novo_produto) para incluir o dicionário do novo item e grava tudo de volta com json.dump. Esse ciclo de ler, alterar e regravar é o padrão para atualizar dados em um arquivo JSON sem perder o que já estava lá.
O :.2f no f-string tem a ver com JSON?
Não diretamente. O :.2f apenas formata o número com duas casas decimais na hora de exibir, para o preço sair como 24.90 em vez de 24.9. É recurso de f-string, visto no básico. O valor guardado no JSON continua sendo o número puro; a formatação é só para mostrar na tela.
Posso filtrar por mais de uma condição ao mesmo tempo?
Sim. Combine condições com and e or no if, por exemplo if produto["preco"] <= 50 and produto["categoria"] == "Papelaria". A mesma ideia vale na compreensão de lista. Assim você seleciona, por exemplo, só os produtos de papelaria abaixo de um preço.
E se o arquivo produtos.json ainda não existir na primeira execução?
A parte que grava cria o arquivo, então rode primeiro o código que monta e salva o catálogo. Se você tentar ler antes de gravar, o Python levanta FileNotFoundError. Em um programa completo, é comum verificar se o arquivo existe e criar um catálogo vazio quando ele falta.
Esse catálogo serve de base para um projeto maior?
Serve muito bem. A partir dele você pode adicionar busca por nome, ordenação por preço, contagem por categoria e edição de itens. Quando o programa cresce, vale organizar essas operações em funções, e mais adiante em classes, temas que o curso trata nos módulos de orientação a objetos.

Fontes

Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.