Python JSON: codificar (despejar), decodificar (carregar) e ler arquivo JSON
O que รฉ JSON em Python?
JSON in Python รฉ um formato padrรฃo inspirado em JavaScript para troca e transferรชncia de dados como formato de texto em uma rede. Geralmente, 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 JavaNotaรงรฃo de Objeto de Script.
Python Sintaxe JSON:
JSON รฉ escrito como um par de chave e valor.
{
"Key": "Value",
"Key": "Value",
}
JSON รฉ muito semelhante a Python dicionรกrio. Python suporta JSON e possui uma biblioteca embutida como JSON.
Biblioteca JSON em Python
'marechal'E'salmoura' mรณdulos externos de Python manter uma versรฃo de JSON Python biblioteca. Trabalhando com JSON em Python para executar 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 seguintes mรฉtodos estรฃo disponรญveis no JSON Python mรณdulo
| Forma | Descriรงรฃo |
|---|---|
| lixรตes() | codificaรงรฃo para objetos JSON |
| jogar fora() | string codificada escrita em arquivo |
| cargas() | Decodifique a string JSON |
| carregar() | Decodificar enquanto o arquivo JSON รฉ lido |
Python para JSON (codificaรงรฃo)
JSON Biblioteca de Python executa a seguinte traduรงรฃo de Python objetos em objetos JSON por padrรฃo
| Python | JSON |
|---|---|
| ditar | objeto |
| Lista | Ordem |
| unicode | Tanga |
| nรบmero โ int, longo | nรบmero โ int |
| flutuar | nรบmero โ real |
| a Verdadeira | a Verdadeira |
| Falso | Falso |
| nenhum | Nulo |
Convertendo Python dados para JSON รฉ chamado de operaรงรฃo de codificaรงรฃo. A codificaรงรฃo รฉ feita com a ajuda do mรฉtodo da biblioteca JSON โ lixรตes()
Despejos JSON() em Python
json.dumps () in Python รฉ um mรฉtodo que converte objetos de dicionรกrio de Python no formato de dados de string JSON. ร รบtil quando os objetos precisam estar no formato de string para 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}})
Vejamos um exemplo de Python escreva JSON em arquivo para criar um arquivo JSON do dicionรกrio usando a mesma funรงรฃo jogar fora()
# 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 abaixo, escrever JSON no arquivo Python exemplo.
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 exemplos de objetos JSON para Python objetos que sรฃo รบteis para realizar a decodificaรงรฃo em Python da string JSON.
| JSON | Python |
|---|---|
| objeto | ditar |
| Ordem | Lista |
| Tanga | unicode |
| nรบmero โ int | nรบmero โ int, longo |
| nรบmero โ real | flutuar |
| a Verdadeira | a Verdadeira |
| Falso | Falso |
| Nulo | nenhum |
Vamos ver uma anรกlise JSON bรกsica Python exemplo 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 como ler o arquivo JSON em Python com as Python analisar exemplo JSON:
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 mencionado em seu programa.
Python leia o arquivo JSON Exemplo:
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 de Python conforme mostrado no arquivo JSON lido acima Python exemplo.
Saรญda:
{'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 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 cรณdigo bem formatado para compreensรฃo humana. Com a ajuda de uma 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, altere o recuo para 40 e observe a saรญda-
Ordenando o cรณdigo JSON:
sort_keys atributo em Python O argumento da funรงรฃo dumps classificarรก a chave em JSON em ordem crescente. O argumento sort_keys รฉ um atributo booleano. Quando รฉ verdadeiro, a classificaรงรฃo รฉ permitida, caso contrรกrio, nรฃo. Vamos entender com Python string para exemplo de classificaรงรฃo 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 as chaves idade, carros, crianรงas, etc. estรฃo organizados em ordem crescente.
Codificaรงรฃo de objeto complexo de Python
Um objeto Complexo possui 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 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 JSONEncoder
A classe JSONEncoder รฉ usada para serializaรงรฃo de qualquer Python objeto 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 serializado para o objeto.
- codificar (o) โ O mesmo que despejos JSON Python mรฉtodo retorna string JSON de Python estrutura de dados.
- 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 Python objeto como mostrado abaixo Python Exemplo de codificador JSON.
# 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 Python objeto durante a execuรงรฃo da 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) โ Igual ao retorno do mรฉtodo json.loads() Python estrutura de dados de string ou dados JSON.
- raw_decode(o) โ Representar Python dicionรกrio 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 conforme mostrado abaixo Python Exemplo de decodificador JSON.
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 de URL: exemplo da vida real
Buscaremos dados do CityBike NYC (sistema de compartilhamento de bicicletas) do URL especificado (https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json) e converta para o formato de dicionรกrio.
Python carregar JSON do arquivo Exemplo:
NOTA: - Certifique-se de que a biblioteca de solicitaรงรตes jรก esteja instalada em seu Python, Caso contrรกrio, abra Terminal ou CMD e digite
- (Para Python 3 ou acima) 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://gbfs.citibikenyc.com/gbfs/2.3/gbfs.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:
- Aula json.JSONDecoderError lida com a exceรงรฃo relacionada ร operaรงรฃo de decodificaรงรฃo. e รฉ uma subclasse de Erro de valor.
- Exceรงรฃo โ json.JSONDecoderError(msg, documento)
- Os parรขmetros de exceรงรฃo sรฃo,
- msg โ Mensagem de erro nรฃo formatada
- doc โ documentos JSON analisados
- pos โ inicia o รญndice do documento quando ele falha
- lineno โ linha no show corresponde a pos
- dois pontos โ coluna nรฃo corresponde a pos
Python carregar 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")
Infinito e NaN Numbers in Python
JSON Data Interchange Format (RFC โ Request For Comments) nรฃo permite valor infinito ou Nan, mas nรฃo hรก restriรงรฃo em Python- Biblioteca JSON para executar operaรงรตes relacionadas a Infinite e Nan Value. Se JSON obtiver INFINITE e Nan datatype, 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 em JSON String
A RFC especifica que o nome da chave deve ser exclusivo em um objeto JSON, mas nรฃo รฉ obrigatรณrio. Python A biblioteca JSON nรฃo gera 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 (interface de linha de comando) com JSON em Python
json.ferramenta fornece a interface de linha de comando para validar a sintaxe JSON bonita. 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 (impressรฃo bonita)
- Amplamente utilizado no tratamento de dados.
- Nรฃo possui 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 matrizes de JSON e nรญveis de aninhamento do objeto.
Python Folha de referรชncias JSON
| Python Funรงรฃo JSON | Descriรงรฃo |
|---|---|
| json.dumps(pessoa_dados) | Criar objeto JSON |
| json.dump(pessoa_dados, arquivo_write) | Crie um arquivo JSON usando E/S de arquivo de Python |
| compact_obj = json.dumps(dados, separadores=(',',':')) | Compacte o objeto JSON removendo o caractere de espaรงo do objeto JSON usando o separador |
| formatado_obj = json.dumps(dic, indent=4, separadores=(',', ': ')) | Formatando cรณdigo JSON usando Indent |
| sort_string = json.dumps(x, recuo=4, sort_keys=True) | Classificando a chave do objeto JSON por ordem alfabรฉtica |
| complex_obj = json.dumps(4 + 5j, padrรฃo=complex_encode) | Python Codificaรงรฃo de objetos complexos em JSON |
| JSONEncoder().encode(colour_dict) | Uso da classe JSONEncoder para serializaรงรฃo |
| json.loads(data_string) | Decodificando string JSON em Python dicionรกrio 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 |








