Python JSON:codificar (despejar), decodificar (carregar) e ler arquivo JSON
O que é JSON em Python?
JSON em Python é um formato padrão inspirado em JavaScript para troca de dados e transferência de dados como formato de texto em uma rede. Geralmente, o JSON está em formato de string ou texto. Ele pode ser usado por APIs e bancos de dados e representa objetos como pares nome/valor. JSON significa Notação de Objeto JavaScript.
Sintaxe JSON do Python:
JSON é escrito como um par de chave e valor.
{
"Key": "Value",
"Key": "Value",
}
JSON é muito semelhante a Dicionário Python. Python suporta JSON e possui uma biblioteca embutida como JSON.
Biblioteca JSON em Python
'marechal ' e 'picles' módulos externos do Python mantêm uma versão do JSON biblioteca Python. Trabalhando com JSON em Python para realizar operações relacionadas a JSON, como codificação e decodificação, você precisa primeiro importar biblioteca JSON e para isso em seu .py Arquivo,
import json
Os métodos a seguir estão disponíveis no módulo JSON Python
| Método | Descrição |
|---|---|
| despejos() | codificação para objetos JSON |
| dump() | string codificada escrevendo em arquivo |
| carregar() | Decodifique a string JSON |
| carregar() | Decodifique enquanto o arquivo JSON é lido |
Python para JSON (codificação)
JSON Library of Python executa a seguinte tradução de objetos Python em objetos JSON por padrão
| Python | JSON |
|---|---|
| dicionar | Objeto |
| lista | Matriz |
| unicode | Sequência |
| número – inteiro, longo | número – inteiro |
| flutuar | número – real |
| Verdadeiro | Verdadeiro |
| Falso | Falso |
| Nenhum | Nulo |
A conversão de dados Python em JSON é chamada de operação de codificação. A codificação é feita com a ajuda do método da biblioteca JSON – dumps()
JSON dumps() em Python
json.dumps() em Python é um método que converte objetos de dicionário de Python em formato de dados de string JSON. É útil quando os objetos precisam estar no formato de string para as operações como análise, impressão, etc.
Agora vamos realizar nosso primeiro exemplo de codificação json.dumps com Python:
import json
x = {
"name": "Ken",
"age": 45,
"married": True,
"children": ("Alice","Bob"),
"pets": ['Dog'],
"cars": [
{"model": "Audi A1", "mpg": 15.1},
{"model": "Zeep Compass", "mpg": 18.1}
]
}
# sorting result in asscending order by keys:
sorted_string = json.dumps(x, indent=4, sort_keys=True)
print(sorted_string)
Saída:
{"person": {"name": "Kenn", "sex": "male", "age": 28}})
Vamos ver um exemplo de Python escrever JSON para arquivo para criar um arquivo JSON do dicionário usando a mesma função dump()
# here we create new data_file.json file with write mode using file i/o operation
with open('json_file.json', "w") as file_write:
# write json data into file
json.dump(person_data, file_write)
Saída:
Nada para mostrar…No seu sistema json_file.json é criado. Você pode verificar esse arquivo conforme mostrado no exemplo de gravação de JSON para arquivo Python abaixo.
JSON para Python (decodificação)
A decodificação de string JSON é feita com a ajuda do método embutido json.loads() &json.load() da biblioteca JSON em Python. Aqui a tabela de tradução mostra um exemplo de objetos JSON para objetos Python que são úteis para realizar a decodificação em Python da string JSON.
| JSON | Píton |
|---|---|
| Objeto | dicionar |
| Matriz | lista |
| Sequência | unicode |
| número – int | número – inteiro, longo |
| número – real | flutuar |
| Verdadeiro | Verdadeiro |
| Falso | Falso |
| Nulo | Nenhum |
Vamos ver um exemplo básico de análise JSON Python de decodificação com a ajuda de json.loads função,
import json # json library imported
# json data string
person_data = '{ "person": { "name": "Kenn", "sex": "male", "age": 28}}'
# Decoding or converting JSON format in dictionary using loads()
dict_obj = json.loads(person_data)
print(dict_obj)
# check type of dict_obj
print("Type of dict_obj", type(dict_obj))
# get human object details
print("Person......", dict_obj.get('person'))
Saída:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Type of dict_obj <class 'dict'>
Person...... {'name': 'John', 'sex': 'male'}
Decodificando arquivo JSON ou analisando arquivo JSON em Python
Agora, aprenderemos a ler o arquivo JSON em Python com o exemplo de JSON de análise do Python:
OBSERVAÇÃO: A decodificação do arquivo JSON é uma operação relacionada à entrada/saída de arquivo (E/S). O arquivo JSON deve existir em seu sistema no local especificado que você menciona em seu programa.
Exemplo de arquivo JSON de leitura do Python:
import json
#File I/O Open function for read data from JSON File
with open('X:/json_file.json') as file_object:
# store file data in object
data = json.load(file_object)
print(data)
Aqui dados é um objeto de dicionário do Python, conforme mostrado no exemplo de Python do arquivo JSON lido acima.
Saída:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Codificação compacta em Python
Quando você precisa reduzir o tamanho do seu arquivo JSON, você pode usar a codificação compacta em Python.
Exemplo,
import json
# Create a List that contains dictionary
lst = ['a', 'b', 'c',{'4': 5, '6': 7}]
# separator used for compact representation of JSON.
# Use of ',' to identify list items
# Use of ':' to identify key and value in dictionary
compact_obj = json.dumps(lst, separators=(',', ':'))
print(compact_obj)
Saída:
'["a", "b", "c", {"4": 5, "6": 7}]'
** Here output of JSON is represented in a single line which is the most compact representation by removing the space character from compact_obj ** Formatar código JSON (impressão bonita)
- O objetivo é escrever um código bem formatado para a compreensão humana. Com a ajuda da impressão bonita, qualquer pessoa pode entender facilmente o código.
Exemplo:
import json
dic = { 'a': 4, 'b': 5 }
''' To format the code use of indent and 4 shows number of space and use of separator is not necessary but standard way to write code of particular function. '''
formatted_obj = json.dumps(dic, indent=4, separators=(',', ': '))
print(formatted_obj)
Saída:
{
"a" : 4,
"b" : 5
}
Para entender melhor isso, mude o recuo para 40 e observe a saída-
Ordenando o código JSON:
sort_keys O atributo no argumento da função dumps do Python classificará a chave no JSON em ordem crescente. O argumento sort_keys é um atributo booleano. Quando é verdade, a classificação é permitida, caso contrário, não. Vamos entender com o exemplo de ordenação de string Python para JSON.
Exemplo,
import json
x = {
"name": "Ken",
"age": 45,
"married": True,
"children": ("Alice", "Bob"),
"pets": [ 'Dog' ],
"cars": [
{"model": "Audi A1", "mpg": 15.1},
{"model": "Zeep Compass", "mpg": 18.1}
],
}
# sorting result in asscending order by keys:
sorted_string = json.dumps(x, indent=4, sort_keys=True)
print(sorted_string)
Saída:
{
"age": 45,
"cars": [ {
"model": "Audi A1",
"mpg": 15.1
},
{
"model": "Zeep Compass",
"mpg": 18.1
}
],
"children": [ "Alice",
"Bob"
],
"married": true,
"name": "Ken",
"pets": [
"Dog"
]
}
Como você pode observar a idade das chaves, carros, crianças, etc estão organizados em ordem crescente.
Codificação de objetos complexos do Python
Um objeto Complex tem duas partes diferentes que são
- Parte real
- Parte imaginária
Exemplo:3 +2i
Antes de realizar a codificação de um objeto complexo, você precisa verificar se uma variável é complexa ou não. Você precisa criar uma função que verifica o valor armazenado em uma variável usando um método de instância.
Vamos criar a função específica para verificar se o objeto é complexo ou elegível para codificação.
import json
# create function to check instance is complex or not
def complex_encode(object):
# check using isinstance method
if isinstance(object, complex):
return [object.real, object.imag]
# raised error using exception handling if object is not complex
raise TypeError(repr(object) + " is not JSON serialized")
# perform json encoding by passing parameter
complex_obj = json.dumps(4 + 5j, default=complex_encode)
print(complex_obj)
Saída:
'[4.0, 5.0]'
Decodificação complexa de objetos JSON em Python
Para decodificar um objeto complexo em JSON, use um parâmetro object_hook que verifica se a string JSON contém o objeto complexo ou não. Vamos entender com string para JSON Python Exemplo,
import json
# function check JSON string contains complex object
def is_complex(objct):
if '__complex__' in objct:
return complex(objct['real'], objct['img'])
return objct
# use of json loads method with object_hook for check object complex or not
complex_object =json.loads('{"__complex__": true, "real": 4, "img": 5}', object_hook = is_complex)
#here we not passed complex object so it's convert into dictionary
simple_object =json.loads('{"real": 6, "img": 7}', object_hook = is_complex)
print("Complex_object......",complex_object)
print("Without_complex_object......",simple_object)
Saída:
Complex_object...... (4+5j)
Without_complex_object...... {'real': 6, 'img': 7}
Visão geral da classe de serialização JSON JSONCoder
A classe JSONEncoder é usada para serialização de qualquer objeto Python durante a execução da codificação. Ele contém três métodos diferentes de codificação que são
- padrão(o) – Implementado na subclasse e retorna o objeto serialize para o objeto.
- codificar(o) – O mesmo que JSON dumps O método Python retorna a string JSON da estrutura de dados do Python.
- iterencode(o) – Representa a string uma a uma e codifica o objeto o.
Com a ajuda do método encode() da classe JSONEncoder, também podemos codificar qualquer objeto Python, conforme mostrado no exemplo de codificador Python JSON abaixo.
# import JSONEncoder class from json
from json.encoder import JSONEncoder
colour_dict = { "colour": ["red", "yellow", "green" ]}
# directly called encode method of JSON
JSONEncoder().encode(colour_dict)
Saída:
'{"colour": ["red", "yellow", "green"]}' Visão geral da classe de desserialização JSON JSONDecoder
A classe JSONDecoder é usada para desserialização de qualquer objeto Python durante a decodificação. Ele contém três métodos diferentes de decodificação que são
- padrão(o) – Implementado na subclasse e retorna objeto desserializado o objeto.
- decodificar(o) – O mesmo que o método json.loads() retorna a estrutura de dados Python de string ou dados JSON.
- raw_decode(o) – Represente o dicionário Python um por um e decodifique o objeto o.
Com a ajuda do método decode() da classe JSONDecoder, também podemos decodificar a string JSON conforme mostrado no exemplo de decodificador Python JSON abaixo.
import json
# import JSONDecoder class from json
from json.decoder import JSONDecoder
colour_string = '{ "colour": ["red", "yellow"]}'
# directly called decode method of JSON
JSONDecoder().decode(colour_string)
Saída:
{'colour': ['red', 'yellow']} Decodificando dados JSON do URL:exemplo da vida real
Buscaremos dados do CityBike NYC (Bike Sharing System) do URL especificado (https://feeds.citibikenyc.com/stations/stations.json) e converteremos em formato de dicionário.
Python carrega JSON do arquivo Exemplo:
NOTA:- Certifique-se de que a biblioteca de solicitações já esteja instalada em seu Python, caso contrário, abra o Terminal ou CMD e digite
- (Para Python 3 ou superior) solicitações de instalação do pip3
import json
import requests
# get JSON string data from CityBike NYC using web requests library
json_response= requests.get("https://feeds.citibikenyc.com/stations/stations.json")
# check type of json_response object
print(type(json_response.text))
# load data in loads() function of json library
bike_dict = json.loads(json_response.text)
#check type of news_dict
print(type(bike_dict))
# now get stationBeanList key data from dict
print(bike_dict['stationBeanList'][0])
Saída:
<class 'str'>
<class 'dict'>
{
'id': 487,
'stationName': 'E 20 St & FDR Drive',
'availableDocks': 24,
'totalDocks': 34,
'latitude': 40.73314259,
'longitude': -73.97573881,
'statusValue': 'In Service',
'statusKey': 1,
'availableBikes': 9,
'stAddress1': 'E 20 St & FDR Drive',
'stAddress2': '',
'city': '',
'postalCode': '',
'location': '',
'altitude': '',
'testStation': False,
'lastCommunicationTime': '2018-12-11 10:59:09 PM', 'landMark': ''
}
Exceções relacionadas à biblioteca JSON em Python:
- Classe json.JSONDecoderError trata a exceção relacionada à operação de decodificação. e é uma subclasse de ValueError.
- Exceção – json.JSONDecoderError(msg, doc)
- Os parâmetros de exceção são,
- msg – Mensagem de erro não formatada
- doc – documentos JSON analisados
- pos – inicia o índice do doc quando ele falha
- lineno – linha não exibida corresponde a pos
- dois pontos – coluna não corresponde a pos
Python carrega JSON do arquivo Exemplo:
import json
#File I/O Open function for read data from JSON File
data = {} #Define Empty Dictionary Object
try:
with open('json_file_name.json') as file_object:
data = json.load(file_object)
except ValueError:
print("Bad JSON file format, Change JSON File")
Números infinitos e NaN em Python
O formato de intercâmbio de dados JSON (RFC – Request For Comments) não permite valor infinito ou Nan, mas não há restrição na biblioteca Python-JSON para realizar operações relacionadas a valor infinito e Nan. Se o JSON obtiver o tipo de dados INFINITE e Nan, ele será convertido em literal.
Exemplo,
import json
# pass float Infinite value
infinite_json = json.dumps(float('inf'))
# check infinite json type
print(infinite_json)
print(type(infinite_json))
json_nan = json.dumps(float('nan'))
print(json_nan)
# pass json_string as Infinity
infinite = json.loads('Infinity')
print(infinite)
# check type of Infinity
print(type(infinite))
Saída:
Infinity <class 'str'> NaN inf <class 'float'>
Chave repetida na string JSON
A RFC especifica que o nome da chave deve ser exclusivo em um objeto JSON, mas não é obrigatório. A biblioteca Python JSON não gera uma exceção de objetos repetidos em JSON. Ele ignora todos os pares de valores-chave repetidos e considera apenas o último par de valores-chave entre eles.
- Exemplo,
import json
repeat_pair = '{"a": 1, "a": 2, "a": 3}'
json.loads(repeat_pair)
Saída:
{'a': 3} CLI (Command Line Interface) com JSON em Python
json.tool fornece a interface de linha de comando para validar a sintaxe de impressão bonita JSON. Vamos ver um exemplo de CLI
$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool Saída:
{
"name": " Kings Authur "
}
Vantagens do JSON em Python
- Fácil de voltar entre contêiner e valor (JSON para Python e Python para JSON)
- Objeto JSON legível por humanos (pretty-print)
- Amplamente utilizado no tratamento de dados.
- Não tem a mesma estrutura de dados no arquivo único.
Limitações de implementação de JSON em Python
- No desserializador de intervalo JSON e previsão de um número
- O comprimento máximo da string JSON e as matrizes de JSON e os níveis de aninhamento do objeto.
Folha de dicas do Python JSON
| Função JSON do Python | Descrição |
|---|---|
| json.dumps(person_data) | Criar objeto JSON |
| json.dump(person_data, file_write) | Criar arquivo JSON usando E/S de arquivo do Python |
| compact_obj =json.dumps(data, separators=(',',':')) | Compactar o objeto JSON removendo o caractere de espaço do objeto JSON usando o separador |
| formatted_obj =json.dumps(dic, indent=4, separators=(',', ':')) | Formatando código JSON usando recuo |
| sorted_string =json.dumps(x, indent=4, sort_keys=True) | Classificando a chave do objeto JSON por ordem alfabética |
| complex_obj =json.dumps(4 + 5j, default=complex_encode) | Codificação de objetos complexos Python em JSON |
| JSONEncoder().encode(color_dict) | Uso da classe JSONEncoder para serialização |
| json.loads(data_string) | Decodificando a string JSON no dicionário Python usando a função json.loads() |
| json.loads(‘{“__complex__”:true, “real”:4, “img”:5}’, object_hook =is_complex) | Decodificação de objeto JSON complexo para Python |
| JSONDecoder().decode(cor_string) | Uso de decodificação JSON para Python com desserialização |
python
- Tipos de dados Python
- Operadores Python
- Python enquanto Loop
- Instrução de passagem do Python
- Argumentos da função Python
- Dicionário Python
- E/S de arquivo Python
- Java BufferedReader:Como Ler Arquivo em Java com Exemplo
- Python verifica se o arquivo existe | Como verificar se existe um diretório em Python
- Python - E/S de arquivos