¿Qué es JSON en Python?
JSON Es un formato estándar en Python inspirado en JavaScript para el intercambio de datos y la transferencia de datos como formato de texto a través de una red. JSON suele estar en formato de texto o cableado. Puede ser utilizado por API y bases de datos, y muestra cosas como pares de nombre / valor. JSON significa notación de objetos JavaScript.
Sintaxis de Python JSON:
JSON se escribe como un par de clave y valor.
{ "Key": "Value", "Key": "Value", }
JSON es muy similar a Diccionario de Python. Pitón es compatible con JSON y tiene una biblioteca incorporada como JSON.
Biblioteca JSON en Python
» ‘mariscal‘y’en escabeche ‘ Los módulos externos de Python mantienen una versión de él. 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 así sucesivamente en su .py expediente,
import json
Los siguientes métodos están disponibles en el módulo JSON de Python
Método | Suelte |
---|---|
vertederos () | codificación de objetos JSON |
Vertedero () | escribir una cadena codificada en un archivo |
cargas () | Decodificar el cable JSON |
carga () | Decodificar mientras lee el archivo JSON |
Python a JSON (codificación)
JSON La biblioteca de Python funciona después de traducir objetos de Python a objetos JSON de forma predeterminada
Pitón | JSON |
dictar | Objeto |
lista | Editar |
Unicode | Cuerda |
número – int, largo | número – int |
flotador | número – verdadero |
Cierto | Cierto |
Falso | Falso |
Dadá | Cielo |
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 modo de biblioteca JSON: vertederos ()
JSON () se vuelca en Python
json.dumps () Python es un método que convierte objetos de diccionario de Python al formato de datos de cadena JSON. Es útil cuando se requiere que los objetos estén en formato de cable para operaciones como análisis, impresión, etc.
Ahora hagamos 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)
Producción:
{"person": {"name": "Kenn", "sex": "male", "age": 28}})
Veremos 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)
Producción:
Nada que mostrar … En su sistema se crea json_file.json. Puede verificar ese archivo como se muestra a continuación, escribir JSON para archivar una instancia de Python.
JSON a Python (decodificación)
La cadena JSON se decodifica con la ayuda del método incorporado json.loads () Y json.load () de la biblioteca JSON en Python. Esta tabla de traducción muestra un ejemplo de artículos JSON sobre objetos Python que son útiles para decodificar en Python una cadena JSON.
JSON | Pitón |
Objeto | dictar |
Editar | lista |
Cuerda | Unicode |
número – int | número – int, largo |
número – verdadero | flotador |
Cierto | Cierto |
Falso | Falso |
Cielo | Dadá |
Veamos un ejemplo básico de 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'))
Producción:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}} Type of dict_obj <class 'dict'> Person...... {'name': 'John', 'sex': 'male'}
Decodificar un archivo JSON o analizar un archivo JSON en Python
Ahora, aprendamos cómo leer un archivo JSON en Python con un ejemplo de análisis Parse JSON:
NOTA: La decodificación de un archivo JSON es una operación relacionada con la entrada / salida (E / S) de archivos. El archivo JSON debe estar presente en su sistema en la ubicación que especifique en su programa.
Lea el ejemplo del archivo JSON de 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)
Aquí hay detalles Es un objeto de diccionario de Python como se muestra en el archivo JSON de ejemplo leído arriba de Python.
Producción:
{'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)
Producción:
'["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 **
Código de formato JSON (letra pequeña)
- El objetivo es escribir código bien formateado para comprender la comprensión humana. Con la ayuda de una buena 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)
Producción:
{ "a" : 4, "b" : 5 }
Para comprender mejor esto, cambie la sangría a 40 y observe el resultado:
Pedido de código JSON:
sort_keys 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 la clasificación verdadera no está permitida. Entendamos con una cadena de Python que un ejemplo de ordenación 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)
Producción:
{ "age": 45, "cars": [ { "model": "Audi A1", "mpg": 15.1 }, { "model": "Zeep Compass", "mpg": 18.1 } ], "children": [ "Alice", "Bob" ], "married": true, "name": "Ken", "pets": [ "Dog" ] }
Al observar la edad de las llaves, los automóviles, los niños, etc. están ordenados en orden ascendente.
Codificación de objetos complejos de Python
Un objeto complejo tiene dos partes diferentes que se
- Parte verdadera
- Parte imaginaria
Ejemplo: 3 + 2i
Antes de codificar 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 usando un método de ejemplo.
Creemos la función específica para un objeto de verificación que sea complejo o apto 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)
Producción:
'[4.0, 5.0]'
Decodificando un objeto JSON complejo en Python
Para decodificar un objeto complejo en JSON, use el parámetro object_hook que verifica si el objeto complejo está en la cadena JSON o no. Comprenda por cable el ejemplo de JSON 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)
Producción:
Complex_object...... (4+5j) Without_complex_object...... {'real': 6, 'img': 7}
Descripción general de JSONEncoder de clase serial JSON
La clase JSONEncoder se utiliza para secuenciar cualquier objeto de Python durante la codificación. Hay tres métodos de codificación diferentes
- predeterminado (o) – Implementado en la subclase y devuelve el objeto serial a o objeto.
- codificación (o) – Igual que JSON vuelca la cadena Python JSON de la estructura de datos de Python.
- iterencode (o) – Representar un hilo uno a uno y codificar un objeto o.
Con la ayuda de un método de codificación () de la clase JSONEncoder, podemos codificar cualquier objeto Python como se muestra en el ejemplo de codificador Python JSON a continuación.
# 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)
Producción:
'{"colour": ["red", "yellow", "green"]}'
Descripción general de la clase JSONDecoder de deserialización JSON
La clase JSONDecoder se usa para descentralizar cualquier objeto de Python mientras se decodifica. Hay tres métodos diferentes de decodificación.
- predeterminado (o) – Implementado en la subclase y devuelto objeto desarmado. o objeto.
- decodificación (o) – Igual que el método json.loads () para recuperar la estructura de datos de Python de datos de cable o JSON.
- raw_decode (o) – Representar el diccionario de Python uno por uno y decodificar el objeto o.
Con la ayuda del método de decodificación () de la clase JSONDecoder, podemos decodificar la cadena JSON como se muestra a continuación, por ejemplo, el 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)
Producción:
{'colour': ['red', 'yellow']}
Decodificación de datos JSON de una URL: ejemplo de la vida real
Recibiremos detalles de CityBike NYC (sistema de bicicletas compartidas) de una URL específica (https://feeds.citibikenyc.com/stations/stations.json) y convertirlo a formato de diccionario.
Cargue Python JSON desde el archivo de ejemplo:
NOTA: – Asegúrese de que la biblioteca de la aplicación ya esté instalada en su Python. De lo contrario, abra Terminal o CMD y escriba
- (Para Python 3 o superior) instalar aplicaciones 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])
Producción:
<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 para la biblioteca JSON en Python:
- Sonó json.JSONDecoderError Maneja la excepción de la operación de decodificación. y es una subclase de ValueError.
- Excepción – json.JSONDecoderError (msg, doc)
- Los parámetros de la excepción son,
- msg – Mensaje de error sin formato
- doc: muelles JSON analizados
- pos de índice inicial cuando falló
- línelo – ninguna línea corresponde a pos
- dos puntos: ninguna columna corresponde a la posición
Cargue Python JSON desde el archivo de 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 indefinidos y NaN en Python
El formato de intercambio de datos JSON (RFC – Solicitud de comentarios) no permite el valor indefinido o Nan, pero no hay ninguna restricción en la biblioteca Python-JSON para realizar una operación de valor indefinido y Nan. Si JSON encuentra el tipo de datos INFINITE y Nan, conviértalo literalmente.
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))
Producción:
Infinity <class 'str'> NaN inf <class 'float'>
Clave repetida en JSON String
RFC especifica que el nombre central debe ser único en un objeto JSON, pero no es obligatorio. La biblioteca PSONon JSON no genera una excepción de objetos repetidos en JSON. Repetidamente ignora todos los pares clave-valor y considera solo el último par valor-clave entre ellos.
import json repeat_pair="{"a": 1, "a": 2, "a": 3}" json.loads(repeat_pair)
Producción:
{'a': 3}
CLI (interfaz de línea de comandos) con JSON en Python
json.tool proporciona la interfaz de línea de comandos para validar la sintaxis de fuente derecha JSON. Veremos un ejemplo de CLI
$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool
Producción:
{ "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 (impresión bonita)
- Ampliamente utilizado en el manejo de datos.
- No tiene la misma estructura de datos en un solo archivo.
Limitaciones de la implementación de JSON en Python
- En el deserializador de rango JSON y predicciones numéricas
- Longitud máxima de cables JSON y matrices JSON y niveles de anidación de objetos.
Hoja de referencia de JSON Python
Función JSON de Python | Suelte |
---|---|
json.dumps (person_data) | Crea un objeto JSON |
json.dump (datos_persona, escritura_archivo) | Crear un archivo JSON usando Python File I / O |
compact_obj = json.dumps (datos, separadores = (‘,’, ‘:’)) | Compacte un objeto JSON eliminando un carácter de espacio del objeto JSON usando un separador |
formatted_obj = json.dumps (dic, sangría = 4, separadores = (‘,’, ‘:’)) | Formatee el código JSON con Sangría |
sorted_string = json.dumps (x, sangría = 4, sort_keys = True) | Ordenar la clave del objeto JSON en orden alfabético |
complex_obj = json.dumps (4 + 5j, predeterminado = complex_encode) | Codificación de objetos complejos de Python en JSON |
Codificación JSONEncoder (). (Color_dict) | Utilice la clase JSONEncoder para serie |
json.loads (cadena_datos) | Decodifica una cadena JSON en un diccionario de Python usando la función json.loads () |
json.loads (‘{«__ complex__»: true, «true»: 4, «img»: 5}’, object_hook = is_complex) | Decodificando un objeto JSON complejo para Python |
Decodificando JSONDecoder (). (Cadena_color) | Utilice la decodificación JSON a Python para la descentralización |