Advertisement
  1. Code
  2. Python

Cómo trabajar con datos JSON utilizando Python

Scroll to top
Read Time: 5 min

Spanish (Español) translation by Carlos (you can also view the original English article)

Este tutorial te muestra lo fácil que es usar el lenguaje de programación Python para trabajar con datos JSON.

Antes de empezar con el tema, vamos a definir brevemente a qué nos referimos con JSON. Veamos cómo lo define el sitio web principal de JSON:

JSON (JavaScript Object Notation o Notación de Objetos de JavaScript) es un formato ligero de intercambio de datos. Para los humanos es fácil leerlo y escribirlo. Para las máquinas es fácil analizarlo y generarlo. Está basado en un subconjunto del Lenguaje de Programación JavaScript, Standard ECMA-262 3rd Edition - Diciembre 1999. JSON es un formato de texto que es completamente independiente del lenguaje, pero utiliza convenciones que son conocidas por los programadores de la familia de lenguajes C, incluyendo C, C++, C#, Java, JavaScript, Perl, Python, y muchos otros. Estas propiedades hacen que JSON sea un lenguaje ideal para el intercambio de datos.

Por ende, JSON es una forma sencilla de crear y almacenar estructuras de datos dentro de JavaScript. El motivo por el que ves JavaScript en el acrónimo se debe al hecho de que se crea un objeto JavaScript cuando se almacenan datos con JSON. Pero, no te preocupes, no necesitas saber Javascript para trabajar con archivos JSON, más bien se trata de la sintaxis JSON (formato) en sí.

En pocas palabras, JSON es una forma en que almacenamos e intercambiamos datos, lo cual se logra a través de su sintaxis, y se utiliza en muchas aplicaciones web. Lo bueno de JSON es que tiene un formato legible para las personas, y esta puede ser una de las razones para usarlo en la transmisión de datos, además de su efectividad cuando se trabaja con APIs.

Un ejemplo de datos con formato JSON es el siguiente:

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

En este tutorial, te enseñaré cómo usar Python para trabajar con archivos JSON. Así que, ¡vamos a empezar!

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 debería estar incluido (integrado) en tu instalación de Python y, por consiguiente, no necesitas instalar ningún módulo externo como hicimos cuando trabajamos con archivos PDF y Excel. Lo único que necesitas para usar este módulo es importarlo:

import json

Pero, ¿qué hace la biblioteca json? Esta biblioteca analiza principalmente a JSON desde archivos o cadenas (strings). También analiza JSON en un diccionario o en una lista en Python y viceversa, es decir, convierte un diccionario o una lista de Python en cadenas de JSON.

JSON a Python

Leer JSON significa convertir JSON en un valor de Python (objeto). Como ya lo mencionamos, la biblioteca json analiza JSON en un diccionario o en una lista en Python. Para hacerlo, utilizamos la función loads() (carga desde una cadena), de la siguiente forma:

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

Si quieres ver el resultado, utiliza print jsonToPython, en cuyo caso obtendrás lo siguiente :

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

Es decir, los datos se devuelven como un diccionario de Python (estructura de datos de objeto JSON). Entonces, ¿la declaración print jsonToPython ['name'] devolverá algún resultado? Adelante, inténtalo.

Python a JSON

En la sección anterior, vimos cómo convertir JSON en un valor de Python (es decir, en un diccionario). En esta sección, te enseñaré cómo podemos convertir (codificar) un valor de Python a JSON.

Supongamos que tenemos el siguiente diccionario en Python:

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

Si imprimimos print dictionaryToJson, obtenemos los siguientes datos JSON:

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

Así que este resultado se considera la representación de los datos del objeto (Diccionario). El método dumps() fue la clave de tal operación.

En este punto, es importante mencionar que JSON no puede almacenar todos los tipos de objetos de Python, solamente los siguientes tipos: listas; diccionarios; booleanos; números; cadenas de caracteres; y ninguno. Por lo tanto, cualquier otro tipo necesita ser convertido para ser almacenado en JSON.

Digamos que tenemos la siguiente clase:

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

Supongamos que creamos un nuevo abder de objeto, de la siguiente manera:

abder = Employee('Abder')

¿Qué pasa si quisiéramos convertir este objeto a JSON? Es decir json.dumps(abder). En este caso, obtendrías un error parecido al siguiente:

1
Traceback (most recent call last):
2
  File "test.py", line 8, in <module>
3
    abderJson = json.dumps(abder)
4
  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
5
    return _default_encoder.encode(obj)
6
  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
7
    chunks = self.iterencode(o, _one_shot=True)
8
  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
9
    return _iterencode(o, 0)
10
  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
11
    raise TypeError(repr(o) + " is not JSON serializable")
12
TypeError: <__main__.Employee object at 0x10e74b750> is not JSON serializable

Pero, ¿existe una solución alternativa? Por suerte la hay. Me gusta la solución descrita en la página web de Python Tips. Para solucionar este problema, podemos definir un método similar al siguiente:

1
def jsonDefault(object):
2
    return object.__dict__

Luego codifica el objeto en JSON de la siguiente forma:

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

Si imprimes print jsonAbder, deberías obtener el siguiente resultado:

{"name": "Abder"}

Ahora hemos codificado un objeto Python (abder) en JSON.

Conclusión

De resultas de este tutorial, podemos observar que Python demuestra una y otra vez no solamente su capacidad para trabajar con aplicaciones, sino también su flexibilidad para trabajar con distintos aspectos mientras se trabaja con una aplicación, como vimos en la última parte del tutorial.

Si quieres conocer más sobre el módulo json, puedes visitar la página de documentación.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.