Como analisar JSON em Python

JSON é um formato popular para troca de dados. O Python é fornecido com um módulo JSON integrado para analisar e trabalhar com dados JSON. E este tutorial ensinará tudo sobre como trabalhar com JSON em Python.

Ao final deste tutorial, você terá aprendido:

  • o básico de JSON,
  • como analisar e criar strings JSON em Python e
  • como ler e gravar em arquivos JSON em Python.

Vamos começar!⏳

O que é JSON?

JSON significa JavaScript Object Notation e é um formato baseado em texto para intercâmbio de dados. Embora o JSON seja inicialmente inspirado em objetos JavaScript, quase todas as linguagens de programação suportam trabalhar com JSON.

Se você já trabalhou com APIs ou leu arquivos de configuração, provavelmente já encontrou JSON.

📑 Você envia e recebe dados em JSON ao consultar APIs. E o JSON também é amplamente utilizado na comunicação cliente-servidor em aplicativos de software. Além disso, você também pode usar JSON para armazenamento de dados de uso geral.

O formato do JSON é muito semelhante ao de um dicionário Python. Dicionários são poderosas estruturas de dados embutidas em Python que armazenam dados em pares chave-valor.

Antes de prosseguirmos, aqui estão alguns pontos que merecem atenção:

  • Em Python, um objeto JSON é armazenado como um dicionário.
  • Uma matriz em JSON é armazenada como uma lista do Python.
  • Em JSON, os valores booleanos são indicados como true e false. Em Python, eles são convertidos para os booleanos True e False.

Para obter mais detalhes sobre os tipos de dados que são traduzidos de JSON para Python, leia os documentos aqui.

Como o módulo json faz parte da biblioteca padrão do Python, você não precisa instalá-lo. Você pode importar para o seu diretório atual, assim:

import json

Como carregar uma string JSON em Python

A sintaxe geral para carregar uma string JSON em Python é:

<dict_obj> = json.loads(<json_str>)

Aqui,

  • é o dicionário Python no qual você deseja carregar a string JSON,
  • é qualquer string JSON válida.

Isso carrega o no dicionário Python .

Vamos codificar um exemplo. Aqui json_str é uma string JSON.

json_str=""'
{
    "books": [
        {
            "title": "The Wind in the Willows",
            "author": "Kenneth Grahame",
            "year": "1908"
        },
        {
            "title": "To the Lighthouse",
            "author": "Virginia Woolf",
            "year": "1927"
        }
    ]
}
'''

E o trecho de código abaixo mostra como você pode carregar a string JSON json_str em um dicionário Python usando o método load(). Você pode usar a função type() integrada para verificar se py_dict é um dicionário Python.

py_dict = json.loads(json_str)

type(py_dict)

# Output: dict

print(py_dict)

# Output
{'books': [{'title': 'The Wind in the Willows', 
'author': 'Kenneth Grahame', 'year': '1908'}, 
{'title': 'To the Lighthouse', 'author': 'Virginia Woolf', 'year': '1927'}]}

Conforme mostrado no código acima, todos os campos na string JSON são pares de valores-chave em py_dict.

Como criar strings JSON em Python

Vamos supor que você tenha um dicionário Python. Então, como você cria uma string JSON a partir dela?

Você pode fazer isso usando o método dumps() com esta sintaxe:

<json_str> = json.dumps(<dict_obj>)

Aqui,

  • é o dicionário Python a partir do qual você deseja criar a string JSON,
  • é a string JSON resultante.

Portanto, o método dumps() despeja em uma string JSON .

Para nosso dicionário Python existente py_dict. vamos adicionar uma nova chave “filmes”. Você pode fazer isso conforme mostrado no trecho de código a seguir:

py_dict["movies"] = [{"title":"The Imitation Game","year":"2014",
"lang":"en","watched":True}]

Agora, vamos despejar o dicionário modificado em uma nova string JSON json_str2 usando o método dumps().

json_str2 = json.dumps(py_dict)

print(json_str2)

# Output
{"books": [{"title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908"}, 
{"title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927"}], 
"movies": [{"title": "The Imitation Game", "year": "2014", "lang": "en", "watched": true}]}

Como você pode ver no exemplo acima, é difícil ler a string JSON de saída sem a formatação adequada. Você pode usar o recuo do parâmetro opcional para adicionar recuo.

E você pode fazer isso definindo recuo como um número inteiro como 2, conforme mostrado abaixo:

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

# Output
{
  "books": [
    {
      "title": "The Wind in the Willows",
      "author": "Kenneth Grahame",
      "year": "1908"
    },
    {
      "title": "To the Lighthouse",
      "author": "Virginia Woolf",
      "year": "1927"
    }
  ],
  "movies": [
    {
      "title": "The Imitation Game",
      "year": "2014",
      "lang": "en",
      "watched": true
    }
  ]
}

Observe como a saída foi formatada com recuo e é fácil acompanhar.

Nota: 💡 Se você quiser que as chaves sejam classificadas em ordem alfabética, você pode definir o parâmetro sort_keys como True.

Como você pode ver no trecho de código abaixo, as chaves agora foram classificadas em ordem alfabética.

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

# Output
{
  "books": [
    {
      "author": "Kenneth Grahame",
      "title": "The Wind in the Willows",
      "year": "1908"
    },
    {
      "author": "Virginia Woolf",
      "title": "To the Lighthouse",
      "year": "1927"
    }
  ],
  "movies": [
    {
      "lang": "en",
      "title": "The Imitation Game",
      "watched": true,
      "year": "2014"
    }
  ]

E as chaves agora aparecem em ordem alfabética: “autor”, “título” e “ano”.

Até agora, você aprendeu a trabalhar com strings JSON em Python. Na próxima seção, você aprenderá a trabalhar com arquivos JSON.

Como ler um arquivo JSON em Python

Para ler um arquivo JSON em Python, use a seguinte sintaxe:

json.load(<json-file>) 

# where <json-file> is any valid JSON file.

Observe como usamos o método load() e não o método loading(). load() carrega uma string JSON, enquanto load() carrega um arquivo JSON.

Você deve considerar o uso de gerenciadores de contexto ao trabalhar com arquivos em Python. Você também pode tentar ler os arquivos da seguinte forma, sem usar o gerenciador de contexto:

my_file = open('students.json','r')

contents = my_file.read()

print(contents)

file.close()

Se você não fechar o arquivo, pode haver um possível desperdício de recursos.

No entanto, ao trabalhar com gerenciadores de contexto, os arquivos são fechados automaticamente quando as operações do arquivo são concluídas.

E você pode usar o gerenciador de contexto para ler os arquivos, conforme mostrado abaixo:

with open('students.json','r') as file:   
   data = json.load(file) 
   print(data) 

# Output 

{'students': [{'roll_num': 'cs27', 'name': 'Anna', 'course': 'CS'}, 
{'roll_num': 'ep30', 'name': 'Kate', 'course': 'PHY'}]}

Ao ler um arquivo, especifique o modo como lido—indicado por ‘r’ no código acima.

Observação: para navegar facilmente pelo diretório atual, certifique-se de que o arquivo JSON esteja na mesma pasta que main.py, conforme mostrado na imagem abaixo. Se o seu arquivo JSON estiver em uma pasta diferente, certifique-se de especificar o caminho para o arquivo.

Leia o arquivo JSON em Python.

Na próxima seção, você aprenderá a gravar em um arquivo JSON.✍

Como gravar em um arquivo JSON em Python

Para gravar em um arquivo JSON existente ou criar um novo arquivo JSON, use o método dump() conforme mostrado:

json.dump(<dict_obj>,<json_file>)

# where <dict_obj> is a Python dictionary 

# and <json_file> is the JSON file 

Portanto, a sintaxe acima despeja o dicionário no arquivo JSON .

Na seção anterior, tínhamos o dicionário py_dict. Agora vamos despejar isso em um novo arquivo JSON. E vamos chamá-lo de new_file.json.

E a seguinte célula de código mostra como você pode usar a função dump():

with open('new_file.json','w') as file:
  json.dump(py_dict,file)

Nota: Abrir um arquivo no modo de gravação (w) substitui o conteúdo se o arquivo existir. Se o arquivo não existir, o arquivo será criado.

Após executar a célula de código acima, você verá que um novo arquivo JSON foi criado no diretório de trabalho atual. E você pode ir em frente e examinar o conteúdo do arquivo JSON.

Criar arquivo JSON em Python

Ao gravar em arquivos, o objetivo principal é o armazenamento de dados. E se quiser preservar a formatação, você também pode usar os parâmetros indent e sort_keys.

Conclusão

⏲ ​​É hora de um resumo rápido.

Neste tutorial, você aprendeu:

  • o básico do uso de JSON,
  • como usar os métodos load() e load() para ler arquivos JSON string e JSON respectivamente,
  • como usar os métodos dumps() e dump() para despejar dicionários Python em strings JSON e arquivos JSON, respectivamente.

Espero que você tenha achado este tutorial útil. Feliz aprendizado!

Você também pode consultar as Ferramentas JSON para analisar, formatar e validar.

  Como compartilhar seu calendário do Outlook