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.

Python Exemplo de codificaรงรฃo JSON

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'}

Python Exemplo de decodificaรงรฃo JSON

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}}

Analisando arquivo JSON em Python

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
}

Exemplo de formato de cรณdigo JSON

Para entender melhor isso, altere o recuo para 40 e observe a saรญda-

Exemplo de formato de cรณdigo JSON

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

  1. parte real
  2. parte imaginรกria

Codificaรงรฃo de Objetos Complexos de Python

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")

Biblioteca JSON em Python

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

Interface de linha de comando com JSON

$ 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

Resuma esta postagem com: