Python JSON: codificar (volcados), decodificar (cargas) y leer archivos JSON

¿Qué es JSON en Python?

JSON en Python es un formato estándar inspirado en JavaScript para el intercambio y transferencia de datos como formato de texto a través de una red. Generalmente, JSON está en formato de cadena o texto. Puede ser utilizado por API y bases de datos, y representa objetos como pares de nombre/valor. JSON significa notación de objetos JavaScript.

Sintaxis JSON de Python:

JSON se escribe como un par de clave y valor.

{
        "Key":  "Value",
        "Key":  "Value",
} 

JSON es muy similar al diccionario Python. Python admite JSON y tiene una biblioteca incorporada como JSON.

Biblioteca JSON en Python

"mariscal'Y'pepinillo' Los módulos externos de Python mantienen una versión de JSON Biblioteca de Python. Para trabajar con JSON en Python para realizar operaciones relacionadas con JSON, como codificación y decodificación, primero debe importar biblioteca JSON y para eso en su py archivo,

import json

Following Los métodos están disponibles en el módulo JSON Python.

Método Descripción
deshecho() codificación de objetos JSON
vertedero() escritura de cadena codificada en el archivo
cargas() Decodificar la cadena JSON
carga() Decodificar mientras se lee el archivo JSON

Python a JSON (Codificación)

JSON La biblioteca de Python realiza seguimientowing traducción de objetos Python a objetos JSON de forma predeterminada

Python JSON
dict Objeto
lista Formación
Unicode Cordón
número – int, largo número – int
flotar número – real
¿Editas con tu equipo de forma remota? ¿Editas con tu equipo de forma remota?
Falso Falso
Ninguna Nulo

La conversión de datos de Python a JSON se denomina operación de codificación. La codificación se realiza con la ayuda del método de la biblioteca JSON: deshecho()

Volcados de JSON() en Python

json.dumps () en Python es un método que convierte objetos de diccionario de Python en formato de datos de cadena JSON. Es útil cuando se requiere que los objetos estén en formato de cadena para operaciones como análisis, impresión, etc.

Ahora realicemos nuestro primer ejemplo de codificación json.dumps con 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)

Salida:

{"person": {"name": "Kenn", "sex": "male", "age": 28}})

Veamos un ejemplo de Python escribiendo JSON en un archivo para crear un archivo JSON del diccionario usando la misma función. vertedero()

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

Salida:

Nada que mostrar... En su sistema se crea json_file.json. Puede verificar ese archivo como se muestra en el siguiente ejemplo de escritura JSON en un archivo de Python.

Ejemplo de codificación JSON de Python

JSON a Python (Decodificación)

La decodificación de cadenas JSON se realiza con la ayuda del método incorporado json.loads () & json.cargar() de la biblioteca JSON en Python. Aquí la tabla de traducción muestra un ejemplo de objetos JSON para Objetos de Python que son útiles para realizar la decodificación en Python de una cadena JSON.

JSON Python
Objeto dict
Formación lista
Cordón Unicode
número – int número – int, largo
número – real flotar
¿Editas con tu equipo de forma remota? ¿Editas con tu equipo de forma remota?
Falso Falso
Nulo Ninguna

Veamos un ejemplo básico de decodificación de JSON Python con la ayuda de json.cargas función,

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

Salida:

{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Type of dict_obj <class 'dict'>
Person...... {'name': 'John', 'sex': 'male'}

Ejemplo de decodificación JSON de Python

Decodificar archivos JSON o analizar archivos JSON en Python

Ahora, aprenderemos cómo leer un archivo JSON en Python con el ejemplo de análisis JSON de Python:

NOTA: La decodificación de archivos JSON es una operación relacionada con la entrada/salida de archivos (E/S). El archivo JSON debe existir en su sistema en la ubicación especificada que menciona en su programa.

Python lee el archivo JSON Ejemplo:

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)

Aquí datos es un objeto de diccionario de Python como se muestra en el ejemplo de Python de lectura del archivo JSON anterior.

Salida:

{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}

Analizando el archivo JSON en Python

Codificación compacta en Python

Cuando necesite reducir el tamaño de su archivo JSON, puede usar codificación compacta en Python.

Ejemplo,

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)

Salida:

'["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 **

Formatear código JSON (impresión bonita)

  • El objetivo es escribir código bien formateado para la comprensión humana. Con la ayuda de una bonita impresión, cualquiera puede entender fácilmente el código.

Ejemplo:

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)

Salida:

{
   "a" : 4,
   "b" : 5
}

Formatear código JSON Ejemplo

Para comprender mejor esto, cambie la sangría a 40 y observe el resultado:

Formatear código JSON Ejemplo

Ordenando el código JSON:

ordenar_claves El atributo en el argumento de la función de volcado de Python ordenará la clave en JSON en orden ascendente. El argumento sort_keys es un atributo booleano. Cuando es cierto, se permite la clasificación; de lo contrario, no. Entendamos el ejemplo de clasificación de cadena de Python a JSON.

Ejemplo,

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)

Salida:

{
    "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 puede observar, las claves de edad, automóviles, niños, etc. están ordenadas en orden ascendente.

¿Cómoplex Codificación de objetos de Python

Una complex El objeto tiene dos partes diferentes, es decir.

  1. Parte real
  2. Parte imaginaria

¿Cómoplex Codificación de objetos de Python

Ejemplo: 3 +2i

Antes de realizar la codificación de un complex objeto, es necesario comprobar que una variable es complex O no. Necesita crear una función que verifique el valor almacenado en una variable utilizando un método de instancia.

Creemos la función específica para verificar que el objeto sea com.plex o elegible para codificación.

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)

Salida:

'[4.0, 5.0]'

¿Cómoplex Decodificación de objetos JSON en Python

Para decodificar complex objeto en JSON, use un parámetro object_hook que verifica que la cadena JSON contenga el complex objeto o no. Entendamos con una cadena en el ejemplo JSON de Python,

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)

Salida:

Complex_object...... (4+5j)
Without_complex_object...... {'real': 6, 'img': 7}

Descripción general de la clase de serialización JSON JSONEncoder

La clase JSONEncoder se utiliza para la serialización de cualquier objeto Python mientras se realiza la codificación. Contiene tres métodos diferentes de codificación que son

  • predeterminado(o) – Implementado en la subclase y devuelve el objeto serializado para o objeto.
  • codificar(o) – Igual que los volcados JSON, el método Python devuelve una cadena JSON de la estructura de datos de Python.
  • itercodificación(o) – Representar cadenas una por una y codificar el objeto o.

Con la ayuda del método encode() de la clase JSONEncoder, también podemos codificar cualquier objeto Python como se muestra en el siguiente ejemplo del codificador Python 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)

Salida:

'{"colour": ["red", "yellow", "green"]}'

Descripción general de la clase de deserialización JSON JSONDecoder

La clase JSONDecoder se utiliza para deserializar cualquier objeto Python mientras se realiza la decodificación. Contiene tres métodos diferentes de decodificación que son

  • predeterminado(o) – Implementado en la subclase y devuelve objeto deserializado. o objeto.
  • decodificar (o) – Igual que el método json.loads(), devuelve la estructura de datos de Python de una cadena o datos JSON.
  • raw_decode(o) – Representar el diccionario de Python uno por uno y decodificar el objeto o.

Con la ayuda del método decode() de la clase JSONDecoder, también podemos decodificar una cadena JSON como se muestra en el siguiente ejemplo de decodificador Python 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)

Salida:

{'colour': ['red', 'yellow']}

Decodificación de datos JSON de URL: ejemplo de la vida real

Obtendremos datos de CityBike NYC (Sistema de bicicletas compartidas) de la URL especificada (https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json) y convertirlo a formato de diccionario.

Python carga JSON desde un archivo Ejemplo:

NOTA: - Asegúrese de que la biblioteca de solicitudes ya esté instalada en su Python. De lo contrario, abra Terminal o CMD y escriba

  • (Para Python 3 o superior) solicitudes de instalación de 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]) 

Salida:

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

Excepciones relacionadas con la biblioteca JSON en Python:

  • Clase json.JSONDecoderError maneja la excepción relacionada con la operación de decodificación. y es una subclase de Error de valor.
  • Excepción - json.JSONDecoderError (mensaje, documento)
  • Los parámetros de excepción son,
    • msg – Mensaje de error sin formato
    • doc – documentos JSON analizados
    • pos: inicia el índice del documento cuando falla
    • lineno – la línea no presentada corresponde a pos
    • dos puntos – la columna no corresponde a pos

Python carga JSON desde un archivo Ejemplo:

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

Números infinitos y NaN en Python

El formato de intercambio de datos JSON (RFC – Solicitud de comentarios) no permite valores infinitos o Nan, pero no hay restricciones en la biblioteca Python-JSON para realizar operaciones relacionadas con valores infinitos y Nan. Si JSON obtiene el tipo de datos INFINITE y Nan, lo convierte en literal.

Ejemplo,

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

Salida:

Infinity
<class 'str'>
NaN
inf
<class 'float'>	

Clave repetida en cadena JSON

RFC especifica que el nombre de la clave debe ser único en un objeto JSON, pero no es obligatorio. La biblioteca Python JSON no genera una excepción de objetos repetidos en JSON. Ignora todos los pares clave-valor repetidos y considera solo el último par clave-valor entre ellos.

  • Ejemplo,
import json
repeat_pair = '{"a":  1, "a":  2, "a":  3}'
json.loads(repeat_pair)

Salida:

{'a': 3}

CLI (Interfaz de línea de comando) con JSON en Python

json.herramienta proporciona la interfaz de línea de comandos para validar la sintaxis JSON de impresión bonita. Veamos un ejemplo de CLI

Interfaz de línea de comando con JSON

$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool

Salida:

{
    "name": " Kings Authur "
}

Ventajas de JSON en Python

  • Fácil de retroceder entre contenedor y valor (JSON a Python y Python a JSON)
  • Objeto JSON legible por humanos (bastante impreso)
  • Ampliamente utilizado en el manejo de datos.
  • No tiene la misma estructura de datos en un solo archivo.

Limitaciones de implementación de JSON en Python

  • En deserializador de rango JSON y predicción de un número
  • La longitud máxima de la cadena JSON y las matrices de JSON y los niveles de anidamiento del objeto.

Hoja de referencia de Python JSON

Función JSON de Python Descripción
json.dumps(persona_datos) Crear objeto JSON
json.dump(datos_persona, escritura_archivo) Cree un archivo JSON usando File I/O de Python
compact_obj = json.dumps(datos, separadores=(',',':')) Objeto JSON compacto eliminando el carácter de espacio del objeto JSON usando un separador
formatted_obj = json.dumps (dic, sangría = 4, separadores = (',', ': ')) Formatear código JSON usando sangría
cadena_clasificada = json.dumps(x, sangría=4, claves_clasificadas=Verdadero) Ordenar la clave de objeto JSON por orden alfabético
complex_obj = json.dumps(4 + 5j, predeterminado=complex_codificar) Pythoncomplex Codificación de objetos en JSON
JSONEncoder().codificar(color_dict) Uso de la clase JSONEncoder para serialización
json.loads(cadena_datos) Decodificación de cadenas JSON en el diccionario Python usando la función json.loads()
json.cargas(‘{“__complex__”: verdadero, “real”: 4, “img”: 5}’, object_hook = is_complex) Decodificación de complex Objeto JSON para Python
JSONDecoder().decodificar(cadena_color) Uso de decodificación de JSON a Python con deserialización