Mestre JSON em Python: Guia Completo para Iniciantes

Introdução ao JSON com Python

JSON, um formato de troca de dados amplamente adotado, encontra no Python um aliado poderoso através do seu módulo JSON integrado. Este guia tem como objetivo elucidar todos os aspectos do trabalho com JSON utilizando Python.

Ao concluir este tutorial, você terá adquirido conhecimento sobre:

  • Os fundamentos do formato JSON.
  • Os métodos para interpretar e gerar strings JSON em Python.
  • As práticas recomendadas para leitura e escrita de arquivos JSON utilizando Python.

Vamos dar início! 🚀

O Que É JSON?

JSON, abreviação de JavaScript Object Notation, é um padrão textual para intercâmbio de informações. Embora tenha raízes nos objetos JavaScript, o JSON é compatível com a maioria das linguagens de programação.

É muito provável que você já tenha se deparado com JSON ao trabalhar com APIs ou ao examinar arquivos de configuração.

📁 JSON é o formato predominante no envio e recebimento de dados ao interagir com APIs. Ele também desempenha um papel crucial na comunicação entre cliente e servidor em aplicações de software, além de ser útil para armazenamento de dados em geral.

O JSON se assemelha a um dicionário Python, uma estrutura de dados nativa que armazena informações em pares chave-valor.

Antes de prosseguirmos, vale a pena mencionar alguns pontos importantes:

  • Em Python, um objeto JSON é representado como um dicionário.
  • Um array JSON é interpretado como uma lista Python.
  • Os valores booleanos em JSON (true, false) são convertidos para seus equivalentes Python (True, False).

Para mais detalhes sobre a conversão de tipos de dados entre JSON e Python, consulte a documentação oficial.

O módulo json é parte integrante da biblioteca padrão do Python, dispensando qualquer instalação adicional. Para começar a usá-lo, basta importá-lo:

import json

Carregando Strings JSON em Python

A sintaxe geral para transformar uma string JSON em um objeto Python é:

<objeto_dict> = json.loads(<string_json>)

Onde:

  • é o dicionário Python que receberá os dados.
  • é a string JSON que será processada.

Esta operação interpreta e armazena os dados em .

Vejamos um exemplo prático. Considere a seguinte string JSON:

json_str = """
{
    "livros": [
        {
            "titulo": "O Vento nos Salgueiros",
            "autor": "Kenneth Grahame",
            "ano": "1908"
        },
        {
            "titulo": "Ao Farol",
            "autor": "Virginia Woolf",
            "ano": "1927"
        }
    ]
}
"""

O código abaixo demonstra como carregar a string json_str em um dicionário Python. A função type() confirma que o resultado é um dicionário:

py_dict = json.loads(json_str)

type(py_dict)

# Saída: dict

print(py_dict)

# Saída
{'livros': [{'titulo': 'O Vento nos Salgueiros', 
'autor': 'Kenneth Grahame', 'ano': '1908'}, 
{'titulo': 'Ao Farol', 'autor': 'Virginia Woolf', 'ano': '1927'}]}

Como ilustrado, todos os campos da string JSON são mapeados para pares chave-valor no dicionário Python.

Criando Strings JSON em Python

Se você tiver um dicionário Python, como pode transformá-lo em uma string JSON? A resposta é o método dumps(), cuja sintaxe é:

<string_json> = json.dumps(<objeto_dict>)

Onde:

  • é o dicionário Python de origem.
  • é a string JSON resultante.

O método dumps() serializa o dicionário para a string JSON .

Vamos adicionar uma nova chave “filmes” ao dicionário py_dict:

py_dict["filmes"] = [{"titulo":"O Jogo da Imitação","ano":"2014", "idioma":"en","assistido":True}]

Agora, vamos converter este dicionário atualizado para uma nova string JSON:

json_str2 = json.dumps(py_dict)

print(json_str2)

# Saída
{"livros": [{"titulo": "O Vento nos Salgueiros", "autor": "Kenneth Grahame", "ano": "1908"}, 
{"titulo": "Ao Farol", "autor": "Virginia Woolf", "ano": "1927"}], 
"filmes": [{"titulo": "O Jogo da Imitação", "ano": "2014", "idioma": "en", "assistido": true}]}

Como se pode observar, a string JSON resultante é difícil de ler. Para melhorar a legibilidade, podemos adicionar indentação através do parâmetro opcional indent:

json_str2 = json.dumps(py_dict, indent = 2)
print(json_str2)

# Saída
{
  "livros": [
    {
      "titulo": "O Vento nos Salgueiros",
      "autor": "Kenneth Grahame",
      "ano": "1908"
    },
    {
      "titulo": "Ao Farol",
      "autor": "Virginia Woolf",
      "ano": "1927"
    }
  ],
  "filmes": [
    {
      "titulo": "O Jogo da Imitação",
      "ano": "2014",
      "idioma": "en",
      "assistido": true
    }
  ]
}

A saída agora está formatada com indentação, facilitando a leitura.

Nota: Se desejar que as chaves sejam ordenadas alfabeticamente, defina o parâmetro sort_keys como True.

Observe como as chaves agora estão em ordem alfabética:

json_str2 = json.dumps(py_dict, indent = 2, sort_keys=True)
print(json_str2)

# Saída
{
  "filmes": [
    {
      "assistido": true,
      "idioma": "en",
      "titulo": "O Jogo da Imitação",
      "ano": "2014"
    }
  ],
  "livros": [
    {
      "autor": "Kenneth Grahame",
      "titulo": "O Vento nos Salgueiros",
      "ano": "1908"
    },
    {
      "autor": "Virginia Woolf",
      "titulo": "Ao Farol",
      "ano": "1927"
    }
  ]
}

As chaves aparecem em ordem alfabética: “assistido”, “ano”, “autor”, “idioma” e “titulo”.

Até agora, você aprendeu a trabalhar com strings JSON. Na próxima seção, exploraremos como trabalhar com arquivos JSON.

Lendo Arquivos JSON em Python

Para ler um arquivo JSON, utilize a seguinte sintaxe:

json.load(<arquivo_json>) 

# Onde <arquivo_json> representa um arquivo JSON válido.

Observe a utilização do método load() (sem ‘s’ no final) para arquivos JSON. A função loads(), vista anteriormente, é utilizada para strings JSON.

Recomenda-se o uso de gerenciadores de contexto ao trabalhar com arquivos em Python. É possível ler arquivos sem o gerenciador, da seguinte forma:

meu_arquivo = open('alunos.json','r')

conteudo = meu_arquivo.read()

print(conteudo)

meu_arquivo.close()

Se o arquivo não for fechado, recursos podem ser desperdiçados. Ao utilizar gerenciadores de contexto, o fechamento do arquivo é automático ao final das operações.

O exemplo abaixo demonstra a leitura de um arquivo JSON utilizando um gerenciador de contexto:

with open('alunos.json','r') as arquivo:   
   dados = json.load(arquivo) 
   print(dados) 

# Saída 

{'alunos': [{'matricula': 'cs27', 'nome': 'Ana', 'curso': 'CC'}, 
{'matricula': 'ep30', 'nome': 'Cátia', 'curso': 'FIS'}]}

Ao abrir um arquivo para leitura, especifique o modo ‘r’.

Nota: Certifique-se de que o arquivo JSON esteja na mesma pasta que o script principal (ex: main.py) para facilitar a localização. Caso o arquivo esteja em outra pasta, especifique o caminho completo.

Na próxima seção, abordaremos a escrita em arquivos JSON. ✍

Escrevendo em Arquivos JSON em Python

Para escrever em um arquivo JSON (existente ou novo), use o método dump(), como demonstrado abaixo:

json.dump(<objeto_dict>,<arquivo_json>)

# Onde <objeto_dict> é um dicionário Python

# e <arquivo_json> é o arquivo JSON de destino

Esta sintaxe transfere o conteúdo de <objeto_dict> para o arquivo <arquivo_json>.

Vamos salvar o dicionário py_dict em um novo arquivo JSON chamado novo_arquivo.json:

with open('novo_arquivo.json','w') as arquivo:
  json.dump(py_dict,arquivo)

Nota: Abrir um arquivo em modo de escrita (‘w’) sobrescreve o conteúdo se o arquivo já existir. Caso contrário, um novo arquivo é criado.

Após executar o código acima, um novo arquivo JSON será criado no diretório atual. Você pode inspecionar o conteúdo do arquivo.

O principal objetivo da escrita em arquivos é o armazenamento de dados. Se desejar preservar a formatação, utilize os parâmetros indent e sort_keys.

Conclusão

Resumindo rapidamente:

Neste tutorial, você aprendeu:

  • Os fundamentos do uso de JSON.
  • Como usar os métodos loads() e load() para interpretar strings JSON e arquivos JSON, respectivamente.
  • Como utilizar dumps() e dump() para serializar dicionários Python em strings JSON e arquivos JSON, respectivamente.

Esperamos que este guia tenha sido útil. Bons estudos!

Você também pode consultar Ferramentas JSON para analisar, formatar e validar seu código.