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