JSON con Python – Obtener los datos

Hoy en día, muchas de las fuentes de datos que nuestras aplicaciones consumen vienen en este formato. Te voy a explicar con obtener los datos de un JSON con Python.

Json con Python

En primer lugar, vamos a generar un JSON para leerlo posteriormente con nuestro programa Python. En mi caso se basa en un conjunto de clases con una serie de propiedades cada una. Este fichero lo guardaremos en el mismo directorio donde crearemos el fichero de Python. Yo lo he llamado Entites.json y puedes encontrarlo aquí.

Entramos en la parte de programación. Lo primero que tenemos que hacer es generar un nuevo archivo de Python que llamaremos Reader.py. Importaremos el paquete que le dará la habilidad a nuestro código de leer ficheros en formato JSON con Python. Lo hacemos de la siguiente manera.

import json

A continuación, abrimos el fichero JSON que hemos creado posteriormente, lo leemos y cargamos su contenido.

f = open("Entities.json", "r")
content = f.read()
jsondecoded = json.loads(content)

Veamos cada una de las instrucciones:

  • La instrucción open es una instrucción básica de Python que nos permite abrir un determinado fichero. En el primer parámetro le decimos donde se encuentra el fichero en cuestión. Introduciendo la ruta correspondiente. En el segundo parámetro debemos especificar como queremos abrir dicho fichero. En mi caso, lo voy a abrir en modo lectura, por eso utilizo r. Existen diferentes modos de apertura.
  • La segunda instrucción nos permite ejecutar una acción al fichero abierto posteriormente. En mi caso, solo me interesa leer su contenido sin escribir nada, por lo que ejecuto la acción read(). Los datos del fichero leído lo guardamos en la variable content.
  • Por último es necesario descodificar el JSON para que podamos utilizarlo posteriormente dentro de nuestra aplicación. Por lo que llamamos al paquete JSON y le decimos qué ejecute la función loads() sobre el contenido leído previamente. Ahora, tendremos el contenido de JSON en memoria y podremos trabajar con él.

Vamos a extraer uno a uno los datos del JSON y a mostrarlos a través del terminal. Para ello, recorremos cada una de las clases que hemos especificado en el documento y a mostrar el nombre de cada una de las entidades que componen nuestro set de datos. Añadimos el siguiente bloque.

for entity in jsondecoded["Classes"]:
    print(entity)

Con este bloque recorremos cada uno de los elementos del subconjunto «Classes». El nombre entre corchetes tiene que ser el nombre que se le haya asignado a la etiqueta de ese subconjunto. Puedes comprobar en mi JSON que el nombre del primer subconjunto es el mismo que he especificado en este bucle. Por la consola saldrá el JSON completo pero sin formato.

Como ya habrás deducido, esto es ilegible, y en la mayoría de los casos, inútil. Vamos a ver cómo concretar un poco más el dato que estamos buscando. Actualizamos el bucle por esta nueva versión.

for entity in jsondecoded["Classes"]:
    entityName = entity["Name"]
    print(entityName)

Esta vez, hemos extraído el valor con la etiqueta «Name» de cada una de las entidades. Debería salir algo como esto.

Actor
Message

Mucho mejor, ¿verdad?. Ahora que ya sabemos como sacar elementos dado el nombre de sus etiquetas, vamos a intentar obtener el valor de los elementos que se encuentren más profundo en la jerarquía, como por ejemplo, las propiedades de cada una de las entidades. Está todo especificado en el JSON del comienzo. Vamos a hacer algunos cambios en el bloque de código.

for entity in jsondecoded["Classes"]:
    print("Entidad " + entity["Name"] + ". Sus propiedades son: ")
    for entityProperty in entity["Properties"]:
        print("Propiedad " + entityProperty["Name"] + " de tipo " + entityProperty["Type"])

Como puedes observar. Por cada entidad, recorro cada una de sus propiedades y las muestro. Fíjate en que el nombre de las etiquetas coincide con el especificado en el JSON. Si ejecutamos esto, deberíamos obtener algo como esto:

Entidad Actor. Sus propiedades son: 
Propiedad name de tipo String
Propiedad middleName de tipo String
Propiedad surname de tipo String
Propiedad photo de tipo String
Propiedad email de tipo String
Propiedad phone de tipo String
Propiedad address de tipo String

Entidad Message. Sus propiedades son: 
Propiedad sendDate de tipo Date
Propiedad subject de tipo String
Propiedad body de tipo String
Propiedad topic de tipo String

Para acceder al resto de elementos y jerarquías deberás de seguir los pasos que hemos ido viendo. Te dejo todo el código que hemos visto aquí.

Como ves, es muy fácil leer JSON con Python. Si tienes alguna duda o sugerencia no dudes en contactar conmigo a través de los métodos de contacto que pongo a tu disposición.