Python JSON:codificar (volcados), decodificar (cargas) y leer archivos JSON
¿Qué es JSON en Python?
Sintaxis JSON de Python:
JSON se escribe como clave y par de valores.
{ "Key": "Value", "Key": "Value", }
JSON es muy similar a Diccionario de Python. Python es compatible con JSON y tiene una biblioteca incorporada como JSON.
Biblioteca JSON en Python
'mariscal ' y 'pepinillo' módulos externos de Python mantienen una versión de JSON Biblioteca de Python. Al 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
Los siguientes métodos están disponibles en el módulo JSON Python
Método | Descripción |
---|---|
volcados() | codificación a objetos JSON |
volcado() | escritura de cadena codificada en archivo |
cargas() | Decodificar la cadena JSON |
cargar() | Decodificar mientras se lee el archivo JSON |
Python a JSON (codificación)
JSON Library of Python realiza la siguiente traducción de objetos de Python a objetos JSON de forma predeterminada
Pitón | JSON |
---|---|
dictar | Objeto |
lista | matriz |
unicode | Cadena |
número – int, largo | número – entero |
flotar | número – real |
Verdadero | Verdadero |
Falso | Falso |
Ninguno | 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 biblioteca JSON:dumps()
Volcados JSON() en Python
json.volcados() 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 write JSON to file para crear un archivo JSON del diccionario usando la misma función 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)
Salida:
Nada que mostrar... En su sistema se crea json_file.json. Puede verificar ese archivo como se muestra a continuación, escriba JSON en el ejemplo de Python.
JSON a Python (descodificación)
La decodificación de cadenas JSON se realiza con la ayuda del método incorporado json.loads() &json.load() de la biblioteca JSON en Python. Aquí, la tabla de traducción muestra un ejemplo de objetos JSON a objetos de Python que son útiles para realizar la decodificación en Python de cadenas JSON.
JSON | Pitón |
---|---|
Objeto | dict |
Matriz | lista |
Cadena | unicode |
número – int | número – int, largo |
número – real | flotar |
Verdadero | Verdadero |
Falso | Falso |
Nulo | Ninguno |
Veamos un ejemplo básico de análisis JSON Python de decodificación con la ayuda de json.loads 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'}
Descodificación de archivos JSON o análisis de archivos JSON en Python
Ahora, aprenderemos cómo leer un archivo JSON en Python con el ejemplo de JSON de análisis de Python:
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í los datos es un objeto de diccionario de Python como se muestra en el ejemplo de Python de archivo JSON de lectura anterior.
Salida:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Codificación compacta en Python
Cuando necesite reducir el tamaño de su archivo JSON, puede usar la 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 **
Formato de código JSON (letra 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 }
Para comprender mejor esto, cambie la sangría a 40 y observe la salida:
Solicitud del código JSON:
clasificar_claves El atributo en el argumento de la función de volcados de Python ordenará la clave en JSON en orden ascendente. El argumento sort_keys es un atributo booleano. Cuando es cierto, la clasificación está permitida; de lo contrario, no. Entendamos con el ejemplo de clasificación de cadenas 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 dispuestas en orden ascendente.
Codificación de objetos complejos de Python
Un objeto complejo tiene dos partes diferentes que es
- Parte real
- Parte imaginaria
Ejemplo:3 +2i
Antes de realizar la codificación de un objeto complejo, debe verificar si una variable es compleja o no. Debe crear una función que verifique el valor almacenado en una variable utilizando un método de instancia.
Vamos a crear la función específica para que el objeto de verificación sea complejo o elegible para la 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]'
Decodificación de objetos JSON complejos en Python
Para decodificar un objeto complejo en JSON, use un parámetro object_hook que verifique que la cadena JSON contenga el objeto complejo o no. Entendamos con una cadena a JSON Python Example,
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 de Python mientras se realiza la codificación. Contiene tres métodos diferentes de codificación que son
- predeterminado(o) – Implementado en la subclase y devolver el objeto de serialización para o objeto.
- codificar(o) – Igual que los volcados de JSON El método de Python devuelve una cadena JSON de la estructura de datos de Python.
- iterencode(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 de 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 usa para la deserialización de cualquier objeto de Python mientras se realiza la decodificación. Contiene tres métodos diferentes de decodificación que son
- predeterminado(o) – Implementado en la subclase y devolución de objeto deserializado o objeto.
- decodificar(o) – Igual que el método json.loads() devuelve la estructura de datos de Python de cadenas o datos JSON.
- decodificación sin procesar(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 cadenas JSON como se muestra a continuación en el ejemplo del 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)
{'colour': ['red', 'yellow']}
Descodificació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://feeds.citibikenyc.com/stations/stations.json) y los convertiremos 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://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])
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 ValueError.
- 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 que no se muestra 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")
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, entonces se 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 comandos) con JSON en Python
herramienta json. proporciona la interfaz de línea de comandos para validar la sintaxis de impresión bonita de JSON. Veamos un ejemplo de CLI
$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool
Salida:
{ "name": " Kings Authur " }
Ventajas de JSON en Python
- Fácil de volver entre el contenedor y el valor (JSON a Python y Python a JSON)
- Objeto JSON legible por humanos (Pretty-print)
- Ampliamente utilizado en el manejo de datos.
- No tiene la misma estructura de datos en el archivo único.
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 Python JSON | Descripción |
---|---|
json.dumps(persona_datos) | Crear objeto JSON |
json.dump(datos_persona, escritura_archivo) | Crear un archivo JSON mediante la E/S de archivo de Python |
obj_compacto =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=(‘,’, ‘:‘)) | Dar formato al código JSON usando sangría |
cadena_ordenada =json.dumps(x, indent=4, sort_keys=True) | Ordenar la clave de objeto JSON por orden alfabético |
complex_obj =json.dumps(4 + 5j, predeterminado=complex_encode) | Codificación de objetos complejos de Python en JSON |
JSONEncoder().encode(color_dict) | Uso de la clase JSONEncoder para serialización |
json.loads(cadena_datos) | Decodificación de cadenas JSON en el diccionario de Python usando la función json.loads() |
json.loads(‘{“__complex__”:verdadero, “real”:4, “img”:5}’, object_hook =is_complex) | Decodificación de objeto JSON complejo a Python |
JSONDecoder().decode(color_cadena) | Uso de decodificación de JSON a Python con deserialización |
python
- Tipos de datos de Python
- Operadores de Python
- Python mientras bucle
- Declaración de paso de Python
- Funciones de Python
- Argumentos de la función de Python
- Diccionario de Python
- E/S de archivo de Python
- Java BufferedReader:cómo leer un archivo en Java con un ejemplo
- Python comprueba si el archivo existe | Cómo comprobar si existe un directorio en Python
- Python - E/S de archivos