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