O que é JSON?
JSON é um formato padrão para troca de dados, inspirado em JavaScript. Geralmente, JSON está em formato de string ou texto. JSON meios J ava S cript O bject N otation.
A sintaxe de JSON: JSON é escrita como um par de chave e valor.
{"Key": "Value","Key": "Value",}
JSON é muito semelhante ao dicionário Python. Python suporta JSON e tem uma biblioteca embutida como JSON.
Biblioteca JSON em Python
Módulos externos ' marshal ' e ' pickle' do Python mantêm uma versão da biblioteca JSON . Para realizar operações relacionadas a JSON, como codificação e decodificação em Python, você precisa primeiro importar a biblioteca JSON e, para isso, em seu arquivo .py ,
import json
Os seguintes métodos estão disponíveis no módulo JSON
Método | Descrição |
---|---|
lixões() | codificação para objetos JSON |
jogar fora() | escrita de string codificada em arquivo |
carrega () | Decodifique a string JSON |
carregar() | Decodificar enquanto o arquivo JSON é lido |
Python para JSON (codificação)
Biblioteca JSON de Python executa a seguinte tradução de objetos Python em objetos JSON por padrão
Pitão | JSON |
dict | Objeto |
Lista | Variedade |
Unicode | Fragmento |
número - int, longo | número - int |
flutuador | numero - real |
Verdade | Verdade |
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 ()
O método dumps () converte o objeto de dicionário de python em formato de dados de string JSON.
Agora vamos realizar nosso primeiro exemplo de codificação com Python.
import jsonx = {"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)
Resultado:
{"person": {"name": "Kenn", "sex": "male", "age": 28}})
Vamos 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 operationwith open('json_file.json', "w") as file_write:# write json data into filejson.dump(person_data, file_write)
Resultado:
Nada para mostrar
… Em seu sistema json_file.json é criado, você pode verificar esse arquivo.JSON para Python (decodificação)
Descodificação JSON string é feito com a ajuda do método inerente cargas () e 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 de strings JSON.
JSON | Pitão |
Objeto | dict |
Variedade | Lista |
Fragmento | Unicode |
número - int | número - int, longo |
numero - real | flutuador |
Verdade | Verdade |
Falso | Falso |
Nulo | Nenhum |
Vamos ver um exemplo básico de decodificação em Python com a ajuda da função json.loads () ,
import json # json library imported# json data stringperson_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_objprint("Type of dict_obj", type(dict_obj))# get human object detailsprint("Person… ", dict_obj.get('person'))
Resultado:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}Type of dict_objPerson… {'name': 'John', 'sex': 'male'}
Decodificando arquivo JSON ou analisando arquivo JSON em Python
NOTA: 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,
import json#File I/O Open function for read data from JSON Filewith open('X:/json_file.json') as file_object:# store file data in objectdata = json.load(file_object)print(data)
Aqui, os dados são um objeto de dicionário do Python.
Resultado:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Codificação compacta em Python
Quando precisar reduzir o tamanho do seu arquivo JSON, você pode usar a codificação compacta em Python.
Exemplo,
import json# Create a List that contains dictionarylst = ['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 dictionarycompact_obj = json.dumps(lst, separators=(',', ':'))print(compact_obj)
Resultado:
'["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 **
Formato de código JSON (Pretty print)
- 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 jsondic = { '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)
Resultado:
{"a" : 4,"b" : 5}
Para entender melhor isso, altere o recuo para 40 e observe o resultado
Solicitando o código JSON:
O atributo sort_keys no argumento da função dumps () classificará a chave em JSON em ordem crescente. O argumento sort_keys é um atributo booleano. Quando é verdade, a classificação é permitida, caso contrário não
Exemplo,
import jsonx = {"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)
Resultado:
{"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 objeto complexo de Python
Um objeto complexo 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 verifique 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 notdef complex_encode(object):# check using isinstance methodif isinstance(object, complex):return [object.real, object.imag]# raised error using exception handling if object is not complexraise TypeError(repr(object) + " is not JSON serialized")# perform json encoding by passing parametercomplex_obj = json.dumps(4 + 5j, default=complex_encode)print(complex_obj)
Resultado:
'[4.0, 5.0]'
Decodificação de objeto JSON complexo 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. Exemplo,
import json# function check JSON string contains complex objectdef 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 notcomplex_object =json.loads('{"__complex__": true, "real": 4, "img": 5}', object_hook = is_complex)#here we not passed complex object so it's convert into dictionarysimple_object =json.loads('{"real": 6, "img": 7}', object_hook = is_complex)print("Complex_object… ",complex_object)print("Without_complex_object… ",simple_object)
Resultado:
Complex_object… (4+5j)Without_complex_object… {'real': 6, 'img': 7}
Visão geral da classe JSON de serialização JSONEncoder
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
- default (o) - Implementado na subclasse e retorna serializar objeto para o objeto.
- encode (o) - O mesmo que o método json.dumps () retorna a string JSON da estrutura de dados Python.
- iterencode (o) - Representa a string uma por uma e codifica o objeto o.
Com a ajuda do método encode () da classe JSONEncoder, também podemos codificar qualquer objeto Python.
# import JSONEncoder class from jsonfrom json.encoder import JSONEncodercolour_dict = { "colour": ["red", "yellow", "green" ]}# directly called encode method of JSONJSONEncoder().encode(colour_dict)
Resultado:
'{"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
- default (o) - Implementado na subclasse e retorna o objeto desserializado o objeto.
- decode (o) - O mesmo que o método json.loads () retorna a estrutura de dados Python da string JSON ou dados.
- raw_decode (o) - Representa o dicionário Python um por um e decodifica o objeto o.
Com a ajuda do método decode () da classe JSONDecoder, também podemos decodificar a string JSON.
import json# import JSONDecoder class from jsonfrom json.decoder import JSONDecodercolour_string = '{ "colour": ["red", "yellow"]}'# directly called decode method of JSONJSONDecoder().decode(colour_string)
Resultado:
{'colour': ['red', 'yellow']}
Decodificando dados JSON do URL: exemplo da vida real
Buscaremos os dados do CityBike NYC (Bike Sharing System) no URL especificado (https://feeds.citibikenyc.com/stations/stations.json) e os converteremos para o formato de dicionário.
Exemplo,
NOTA: - Certifique-se de que a biblioteca de solicitações já esteja instalada em seu Python, se não, abra o Terminal ou CMD e digite
- (Para Python 3 ou superior) solicitações de instalação pip3
import jsonimport requests# get JSON string data from CityBike NYC using web requests libraryjson_response= requests.get("https://feeds.citibikenyc.com/stations/stations.json")# check type of json_response objectprint(type(json_response.text))# load data in loads() function of json librarybike_dict = json.loads(json_response.text)#check type of news_dictprint(type(bike_dict))# now get stationBeanList key data from dictprint(bike_dict['stationBeanList'][0])
Resultado:
{'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:
- A 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 - a ausência de linha corresponde à pos
- dois pontos - coluna não corresponde a pos
Exemplo,
import json#File I/O Open function for read data from JSON Filedata = {} #Define Empty Dictionary Objecttry: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
JSON Data Interchange Format (RFC - Request For Comments) não permite Infinite ou Nan Value, mas não há nenhuma restrição na biblioteca Python-JSON para executar operações relacionadas a Infinite e Nan Value. Se JSON obtiver o tipo de dados INFINITE e Nan, ele será convertido em literal.
Exemplo,
import json# pass float Infinite valueinfinite_json = json.dumps(float('inf'))# check infinite json typeprint(infinite_json)print(type(infinite_json))json_nan = json.dumps(float('nan'))print(json_nan)# pass json_string as Infinityinfinite = json.loads('Infinity')print(infinite)# check type of Infinityprint(type(infinite))
Resultado:
InfinityNaNinf
Chave repetida em string JSON
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 jsonrepeat_pair = '{"a": 1, "a": 2, "a": 3}'json.loads(repeat_pair)
Resultado:
{'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
Resultado:
{"name": " Kings Authur "}
Vantagens do JSON em Python
- Fácil de mover de volta entre contêiner e valor (JSON para Python e Python para JSON)
- Objeto JSON legível por humanos (impressão bonita)
- Amplamente utilizado no tratamento de dados.
- Não possui a mesma estrutura de dados em um único arquivo.
Limitação 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 matrizes de JSON e níveis de aninhamento de objeto.
Código de trapaça
json.dumps (person_data) |
Criar objeto JSON |
json.dump (person_data, file_write) |
Criar arquivo JSON usando I / O de arquivo Python |
compact_obj = json.dumps (dados, separadores = (',', ':')) |
Objeto JSON compacto 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 Indent |
Sort_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, padrão = complex_encode) |
Codificação de objeto complexo Python em JSON |
JSONEncoder (). Encode (colour_dict) |
Uso da classe JSONEncoder para serialização |
json.loads (data_string) |
Decodificando 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 (). Decodificar (colour_string) |
Uso de decodificação de JSON para Python com desserialização |