Cómo utilizar JSON en Python

Hola a todos, en este nuevo tutorial vamos a ver cómo utilizar JSON en Python, para los que no sepáis aún que es JSON, podéis repasar la serie de tutoriales sobre JSON que tenemos preparada en Geeky Theory.

  1. ¿Qué es y para qué sirve JSON?.
  2. Creación de un JSON a partir de una consulta en MySQL.
  3. Gestionar un JSON en PHP.
  4. Ejemplo práctico de uso de JSON con OpenWeatherMap.

Podemos observar que los tutoriales de la serie JSON están enfocados más al uso de JSON en PHP, sin embargo esta vez, vamos a ver cómo utilizar JSON en Python de una manera sencilla a través de ejemplos.

Pre-requisitos

Para hacer uso de JSON en Python, vamos a usar el paquete json, el cual, incluye todas las funciones necesarias para el tratamiento de JSONs. Como ejemplo de uso vamos a usar el siguiente JSON, el cual es el mismo JSON que pusimos como ejemplo en los tutoriales anteriores de JSON. {"Fruteria": [ {"Fruta": [ {"Nombre":"Manzana","Cantidad":10}, {"Nombre":"Pera","Cantidad":20}, {"Nombre":"Naranja","Cantidad":30} ] }, {"Verdura": [ {"Nombre":"Lechuga","Cantidad":80}, {"Nombre":"Tomate","Cantidad":15}, {"Nombre":"Pepino","Cantidad":50} ] } ] } Como podemos observar, hemos creado un objeto llamado frutería y, dentro de ese objeto hemos almacenado un array de dos elementos. El primer elemento del array contiene un objeto llamado fruta y el segundo elemento del array contiene otro objeto llamado verdura. Estos objetos a su vez contienen un array cuyo contenido es el nombre y la cantidad de cada fruta o verdura.

Ejemplo 1: Codificar JSON

El codificador entiende varios tipos nativos de Python por defecto como por ejemplo: string, unicode, int, float, list, tuple, dict. Por lo tanto en nuestro caso, vamos a crear listas de diccionarios con los datos. import json data = {"Fruteria": [  {"Fruta":   [    {"Nombre":"Manzana","Cantidad":10},    {"Nombre":"Pera","Cantidad":20},    {"Nombre":"Naranja","Cantidad":30}   ]  },  {"Verdura":   [    {"Nombre":"Lechuga","Cantidad":80},    {"Nombre":"Tomate","Cantidad":15},    {"Nombre":"Pepino","Cantidad":50}   ]  } ]} #Nos imprime en pantalla data como un tipo de dato nativo. print 'DATA:', repr(data) #Nos devuelve el String con el JSON data_string = json.dumps(data) print 'JSON:', data_string Output DATA:{'Fruteria': [{'Fruta': [{'Nombre': 'Manzana', 'Cantidad': 10}, {'Nombre': 'Pera', 'Cantidad': 20}, {'Nombre': 'Naranja', 'Cantidad': 30}]}, {'Verdura': [{'Nombre': 'Lechuga', 'Cantidad': 80}, {'Nombre': 'Tomate', 'Cantidad': 15}, {'Nombre': 'Pepino', 'Cantidad': 50}]}]} JSON: {"Fruteria": [{"Fruta": [{"Nombre": "Manzana", "Cantidad": 10}, {"Nombre": "Pera", "Cantidad": 20}, {"Nombre": "Naranja", "Cantidad": 30}]}, {"Verdura": [{"Nombre": "Lechuga", "Cantidad": 80}, {"Nombre": "Tomate", "Cantidad": 15}, {"Nombre": "Pepino", "Cantidad": 50}]}]}

Ejemplo 2: Decodificar JSON

Para decodificar un JSON a vamos a hacer uso de la función json_loads(String)import json data = {"Fruteria": [  {"Fruta":   [    {"Nombre":"Manzana","Cantidad":10},    {"Nombre":"Pera","Cantidad":20},    {"Nombre":"Naranja","Cantidad":30}   ]  },  {"Verdura":   [    {"Nombre":"Lechuga","Cantidad":80},    {"Nombre":"Tomate","Cantidad":15},    {"Nombre":"Pepino","Cantidad":50}   ]  } ]} data_string = json.dumps(data) print 'ENCODED:', data_string decoded = json.loads(data_string) print 'DECODED:', decoded Output ENCODED: {"Fruteria": [{"Fruta": [{"Nombre": "Manzana", "Cantidad": 10}, {"Nombre": "Pera", "Cantidad": 20}, {"Nombre": "Naranja", "Cantidad": 30}]}, {"Verdura": [{"Nombre": "Lechuga", "Cantidad": 80}, {"Nombre": "Tomate", "Cantidad": 15}, {"Nombre": "Pepino", "Cantidad": 50}]}]} DECODED: {u'Fruteria': [{u'Fruta': [{u'Nombre': u'Manzana', u'Cantidad': 10}, {u'Nombre': u'Pera', u'Cantidad': 20}, {u'Nombre': u'Naranja', u'Cantidad': 30}]}, {u'Verdura': [{u'Nombre': u'Lechuga', u'Cantidad': 80}, {u'Nombre': u'Tomate', u'Cantidad': 15}, {u'Nombre': u'Pepino', u'Cantidad': 50}]}]}

Ejemplo 3: Imprimir la cantidad de lechugas que tenemos en el JSON

import json data = {"Fruteria": [  {"Fruta":   [    {"Nombre":"Manzana","Cantidad":10},    {"Nombre":"Pera","Cantidad":20},    {"Nombre":"Naranja","Cantidad":30}   ]  },  {"Verdura":   [    {"Nombre":"Lechuga","Cantidad":80},    {"Nombre":"Tomate","Cantidad":15},    {"Nombre":"Pepino","Cantidad":50}   ]  } ]} #encoded data_string = json.dumps(data) #Decoded decoded = json.loads(data_string) print "Tenemos "+str(decoded["Fruteria"][1]["Verdura"][0]["Cantidad"])+" Lechugas." Vemos que al tener un JSON un tanto complejo tenemos que hacer uso de indices debido a que son listas. Aconsejo que uséis alguna herramienta de visualización como por ejemplo: http://jsonviewer.stack.hu/ Y esto es todo, espero que este pequeño tutorial os ayude a usar JSON en vuestros proyectos Python.