Você sabe ler e escrever arquivos JSON com Python?

JSON significa JavaScript Object Notation, este é um formato para estruturar dados muito semelhante ao conceito de mapas na programação de computadores. Os mapas consistem em chaves e valores correspondentes. Uma chave deve ser única dentro de um mapa.



JSON é um formato leve de representação de dados como texto em um arquivo, cuja sintaxe é emprestada da sintaxe usada para criar objetos JavaScript. Grandes dados são convertidos para o formato JSON para fácil processamento em várias linguagens de programação e transferência para outros nós. É o formato mais usado para solicitações e respostas ao trabalhar com chamadas de API.

Tipos de dados aceitos no formato JSON

As chaves JSON devem ser string. A maioria das linguagens convertem implicitamente qualquer outro tipo de dados em string. Os valores JSON podem ser string, booleanos, inteiros, reais, outro objeto JSON ou array JSON.

Veja a seguir um exemplo de arquivo JSON válido (data.json):

{
  "nome": "Johny KLG",
  "idade": 31,
  "endereco": {
    "rua": "Rua principal",
    "numero": 10,
    "cidade": "Montevideo",
    "cep": 11000
  },
  "casado": true
}
Aqui, o valor da chave “endereco” é outro JSON. A chave “casado” tem valor do tipo booleano.

Observe que JSON não oferece suporte a comentários, e sim, todos os trechos de código fornecidos aqui também são compatíveis com Python 3.

O tipo de dados em Python mais próximo do JSON é o Dictionary. Python suporta interconversões de Dictionary, JSON e string usando um módulo chamado json, uma biblioteca Python embutida.

Para saber mais sobre o Dictionary, leia o artigo: Exemplos de Dictionary Python - Criar, atualizar e excluir elementos

Lendo arquivos JSON

Arquivos JSON geralmente têm extensão .json. No entanto, o Python suporta a análise de qualquer extensão de arquivo que contenha um JSON válido. Para ler um arquivo json e preencher os dados no Dictionary, é usado json.load(). Esta função recebe o objeto de arquivo como parâmetro. A seguir tem um exemplo que ilustra o uso de json.load()

Exemplo de trecho do código:
import json

with open("data.json") as f:
    p = json.load(f)
    print(p, type(p))
    print(p["nome"], "é", "casado" if p["casado"] else "não é casado")
Saída para o exemplo acima:
{'nome': 'Johny KLG', 'idade': 31, 'endereco': {'rua': 'Rua principal', 'numero': 10, 'cidade': 'Montevideo', 'cep': 11000}, 'casado': true} <class 'dict'>
Johny KLG é casado
Aqui f é o objeto de arquivo. json.load() retorna um Dictionary. O trecho de código acima usa Python if else. Você pode obter informações adicionais nesse artigo que ensina: Exemplos de comandos if, if else e if elif no Python

Lendo Strings ou arrays de bytes para o Dictionary

O módulo Json permite que o usuário analise json na forma de strings, bytes ou array de bytes no Dictionary. Isso é feito usando a função json.loads(). Observe a semelhança no nome da função com a função descrita anteriormente. load() espera um objeto de arquivo como parâmetro, enquanto loads() espera uma string como parâmetro. O primeiro lê o arquivo e chama o último implicitamente.

Exemplo de trecho de código:
import json

with open("data.json") as f:
    file_data = f.read()
p = json.loads(file_data)
print(p, type(p))
print(p["nome"], "é", "casado" if p["casado"] else "não é casado")
Saída para o exemplo acima:
{'nome': 'Johny KLG', 'idade': 31, 'endereco': {'rua': 'Rua principal', 'numero': 10, 'cidade': 'Montevideo', 'cep': 11000}, 'casado': true} <class 'dict'>
Johny KLG é casado

Gravando dicionário em um arquivo JSON

Somente strings, arrays de bytes ou bytes podem ser gravados em um arquivo. Portanto, o Dictionary deve ser convertido em uma string formatada em JSON para poder gravar em um arquivo json. Isso é feito usando a função json.dump(). Esta função recebe o Dictionary e o objeto de arquivo como parâmetros.

Exemplo de trecho de código:
import json

json_dict = {
    "nome": "Johny KLG",
    "idade": 31,
    "endereco": {
    	"rua": "Rua principal",
    	"numero": 10,
    	"cidade": "Montevideo",
    	"cep": 11000
    },
    "casado": true
}

print("Type of json_dict:", type(json_dict))

with open("data.json", "w") as f:
    json.dump(json_dict, f, indent=4)
Saída para o exemplo acima:
Type of json_dict: <class 'dict'>

data.json
{
    "nome": "Johny KLG",
    "idade": 31,
    "endereco": {
    	"rua": "Rua principal",
    	"numero": 10,
    	"cidade": "Montevideo",
    	"cep": 11000
    },
    "casado": true
}
Observe que o arquivo json é formatado com tab como 4 espaços. Isso ocorre devido ao parâmetro “indent” na função json.dump().

Gravando uma string formatada em JSON em um arquivo

No exemplo anterior, a análise do Dictionary para a string e a gravação no arquivo são feitas usando uma função, em uma instrução. Aqui, essa etapa é dividida em duas etapas: primeiro o Dictionary é convertido em uma string, salvo em uma variável e depois gravado no arquivo.

Exemplo de trecho de código Python :
import json

json_dict = {
    "nome": "Johny KLG",
    "idade": 31,
    "endereco": {
    	"rua": "Rua principal",
    	"numero": 10,
    	"cidade": "Montevideo",
    	"cep": 11000
    },
    "casado": true
}

print("Type of json_dict:", type(json_dict))

with open("data.json", "w") as f:
    v = json.dumps(json_dict)
    print("v has value", v, "and is of type", type(v))
    f.write(v)
Saída para o exemplo acima:
Type of json_dict: <class 'dict'>
v has value {"nome": "Johny KLG", "idade": 31, "endereco": {"rua": "Rua principal", "numero": 10, "cidade": "Montevideo", "cep": 11000}, "casado": true} and is of type <class 'str'>
data.json {"nome": "Johny KLG", "idade": 31, "endereco": {"rua": "Rua principal", "numero": 10, "cidade": "Montevideo", "cep": 11000}, "casado": true}
Observe que o arquivo data.json não está formatado. Isso ocorre porque o parâmetro “indent” foi omitido da função json.dumps().

Para recursos estendidos do módulo json, você pode consultar a documentação do Python JSON. Mas... se você tiver alguma dúvida, ou sugestão deixa aí nos comentários que eu prometo que respondo... VLW e até o próximo post!

Comentários

Postagens mais visitadas deste blog

Você conhece o utilitário WGET do Linux

Exemplos de comandos if, if else e if elif no Python