Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> python

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)


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
  1. Parte real
  2. 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

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

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


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

Limitações de implementação de JSON em Python

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

  1. Tipos de dados Python
  2. Operadores Python
  3. Python enquanto Loop
  4. Instrução de passagem do Python
  5. Argumentos da função Python
  6. Dicionário Python
  7. E/S de arquivo Python
  8. Java BufferedReader:Como Ler Arquivo em Java com Exemplo
  9. Python verifica se o arquivo existe | Como verificar se existe um diretório em Python
  10. Python - E/S de arquivos