Cómo trabajar con datos JSON utilizando Python

Este tutorial refleja lo fácil que es utilizar el lenguaje de programación Python para trabajar con datos JSON. Antes de ahondar más el tema, vamos a definir brevemente lo que entendemos por JSON. Vamos a ver cómo lo define su propia web oficial:

JSON, acrónimo de JavaScript Object Notation, es un formato de texto ligero para el intercambio de datos. JSON es un subconjunto de la notación literal de objetos de JavaScript aunque hoy, debido a su amplia adopción como alternativa a XML, se considera un formato de lenguaje independiente. Es utilizado para proyectos de lenguajes de programación diferentes como C, C++, Java, Javascript, Perl, Python y muchos más. Estas propiedades hacen que JSON sea el lenguaje ideal para el intercambio de datos.

Por lo tanto, JSON se puede considerar como un método simple de crear y almacenar estructuras de datos. La razón por la que JavaScript está en sus siglas se debe al hecho de que se crea un objeto de JavaScript al almacenar los datos con JSON. Sin embargo, no te preocupes, no necesitas saber nada de JavaScript para trabajar con archivos JSON, sino más bien de la sintaxis (formato) de JSON.

En resumen, JSON es una manera de almacenar e intercambiar datos y, gracias a su sintaxis, se utiliza en muchas aplicaciones web. Lo bueno de JSON es que tiene un formato legible por el humano, y es una de las grandes razones de su popularidad, además de su eficacia trabajamos con APIs.

Un ejemplo de datos con formato JSON es la siguiente:

{"name": "Frank", "age": 39,
 "isEmployed": true}

En este tutorial, os voy a mostrar cómo utilizar Python para trabajar con archivos JSON. ¿Estáis listos? ¡Pues empecemos!

Python y JSON

Python hace que sea sencillo trabajar con archivos JSON. El módulo utilizado para este propósito es el módulo json. Este módulo debe ser incluido (built-in) dentro de tu instalación Python y, por lo tanto, no será necesario instalar módulos externos como ya hicimos cuando trabajamos con archivos PDF y Excel, por ejemplo. Lo único que necesitas hacer con el fin de utilizar este módulo es importarlo:

import json

Pero, ¿qué hace la librería json? Esta librería principalmente parsea el JSON de archivos o strings. También parsea el JSON en un diccionario o en una lista en Python y viceversa, es decir, convierte los diccionarios y las listas de Python en cadenas JSON.

De JSON a Python

Leer JSON significa convertir el JSON en un valor de Python (objeto). Como hemos mencionado anteriormente, la librería json parsea el JSON en un diccionario o en una lista en Python. Con el fin de hacer eso, utilizamos la función loads(), de la siguiente manera:

import json
jsonData = '{"name": "Frank", "age": 39}'
jsonToPython = json.loads(jsonData)

Si deseas ver la salida, haz un print jsonToPython. Si todo ha salido bien obtendrás el siguiente resultado:

{u'age': 39, u'name': u'Frank'}

Es decir, los datos se devuelven como si fuese un diccionario de Python. Por lo tanto, la declaración print jsonToPython['name'], ¿devolverá algo? Inténtalo...

De Python a JSON

En la sección anterior, hemos visto cómo convertir JSON en un valor de Python (es decir, en un diccionario). En esta sección, os voy a mostrar cómo convertir (codificar) un valor de Python a JSON.

Tenemos el siguiente diccionario en Python:

import json
pythonDictionary = {'name':'Bob', 'age':44, 'isEmployed':True}
dictionaryToJson = json.dumps(pythonDictionary)

Si hacemos print dictionaryToJson, obtenemos los siguientes datos JSON:

{"age": 44, "isEmployed": true, "name": "Bob"}

Esta salida se considera la representación de los datos del objeto (diccionario). El método dumps() fue la clave para dicha operación.

Es importante señalar en este punto que, JSON no puede almacenar todo tipo de objetos de Python, sólo los siguientes tipos: Lists, Dictionaries, Booleanas, Numbers, Character Strings y None. Por lo tanto, cualquier otro tipo necesitará ser convertidos a alguno de los mencionados con el fin de ser almacenado en JSON.

Supongamos que tenemos la siguiente clase:

class Employee(object):
    def __init__(self, name):
        self.name = name

Digamos que hemos creado un nuevo objeto abder, de la siguiente manera:

abder = Employee('Abder')

¿Y si quisiéramos convertir este objeto a JSON? Es decir, ¿hacer json.dumps(abder)? En ese caso, obtendrás un error como el siguiente:

Traceback (most recent call last):
  File "test.py", line 8, in 
    abderJson = json.dumps(abder)
  File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 243, in dumps
    return _default_encoder.encode(obj)
  File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 207, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 270, in iterencode
    return _iterencode(o, 0)
  File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 184, in default
    raise TypeError(repr(o) + " is not JSON serializable")
TypeError:  is not JSON serializable

Pero, ¿hay alguna solución? Afortunadamente sí. Para resolver este problema, podemos definir un método similar al siguiente:

def jsonDefault(object):
    return object.__dict__

Codificar posteriormente el objeto en JSON tal que así:

jsonAbder = json.dumps(abder, default=jsonDefault)

Si haces print jsonAbder, deberás obtener el siguiente resultado:

{"name": "Abder"}

Con esto hemos codificado un objeto de Python (abder) en JSON.

Fuente: A. Ahmed

COMPARTE ESTE ARTÍCULO

ENVIAR A UN AMIGO
COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN GOOGLE +
¡SÉ EL PRIMERO EN COMENTAR!
Conéctate o Regístrate para dejar tu comentario.