Cómo analizar JSON en Python

JSON es un formato popular para el intercambio de datos. Python se envía con un módulo JSON incorporado para analizar y trabajar con datos JSON. Y este tutorial le enseñará todo sobre cómo trabajar con JSON en Python.

Al final de este tutorial, habrás aprendido:

  • los fundamentos de JSON,
  • cómo analizar y crear cadenas JSON en Python, y
  • cómo leer y escribir en archivos JSON en Python.

¡Comencemos!⏳

¿Qué es JSON?

JSON significa Notación de objetos de JavaScript y es un formato basado en texto para el intercambio de datos. Aunque JSON se inspira inicialmente en objetos de JavaScript, casi todos los lenguajes de programación admiten trabajar con JSON.

Si alguna vez ha trabajado con API o ha leído archivos de configuración, es probable que se haya topado con JSON.

📑 Envías y recibes datos en JSON al consultar las API. Y JSON también se usa ampliamente en la comunicación cliente-servidor en aplicaciones de software. Además, también puede usar JSON para el almacenamiento de datos de propósito general.

El formato de JSON es muy similar al de un diccionario de Python. Los diccionarios son poderosas estructuras de datos integradas en Python que almacenan datos en pares clave-valor.

Antes de continuar, aquí hay algunos puntos que vale la pena señalar:

  • En Python, un objeto JSON se almacena como un diccionario.
  • Una matriz en JSON se almacena como una lista de Python.
  • En JSON, los valores booleanos se indican como verdadero y falso. En Python, estos se convierten a los valores booleanos True y False.

Para obtener más detalles sobre los tipos de datos que se traducen de JSON a Python, lea los documentos aquí.

Como el módulo json es parte de la biblioteca estándar de Python, no es necesario que lo instale. Puede importar a su directorio actual, así:

import json

Cómo cargar una cadena JSON en Python

La sintaxis general para cargar una cadena JSON en Python es:

<dict_obj> = json.loads(<json_str>)

Aquí,

  • es el diccionario de Python en el que desea cargar la cadena JSON,
  • es cualquier cadena JSON válida.

Esto carga en el diccionario de Python .

Vamos a codificar un ejemplo. Aquí json_str es una cadena JSON.

json_str=""'
{
    "books": [
        {
            "title": "The Wind in the Willows",
            "author": "Kenneth Grahame",
            "year": "1908"
        },
        {
            "title": "To the Lighthouse",
            "author": "Virginia Woolf",
            "year": "1927"
        }
    ]
}
'''

Y el fragmento de código a continuación muestra cómo puede cargar la cadena JSON json_str en un diccionario de Python usando el método loads(). Puede usar la función incorporada type() para verificar que py_dict es un diccionario de Python.

py_dict = json.loads(json_str)

type(py_dict)

# Output: dict

print(py_dict)

# Output
{'books': [{'title': 'The Wind in the Willows', 
'author': 'Kenneth Grahame', 'year': '1908'}, 
{'title': 'To the Lighthouse', 'author': 'Virginia Woolf', 'year': '1927'}]}

Como se muestra en el código anterior, todos los campos en la cadena JSON son pares clave-valor en py_dict.

Cómo crear cadenas JSON en Python

Supongamos que tiene un diccionario de Python. Entonces, ¿cómo se crea una cadena JSON a partir de ella?

Puedes hacerlo usando el método dumps() con esta sintaxis:

<json_str> = json.dumps(<dict_obj>)

Aquí,

  • es el diccionario de Python desde el que desea crear la cadena JSON,
  • es la cadena JSON resultante.

Entonces, el método dumps() vuelca en una cadena JSON .

A nuestro diccionario Python existente py_dict. agreguemos una nueva clave «películas». Puede hacerlo como se muestra en el siguiente fragmento de código:

py_dict["movies"] = [{"title":"The Imitation Game","year":"2014",
"lang":"en","watched":True}]

Ahora, descarguemos el diccionario modificado en una nueva cadena JSON json_str2 usando el método dumps().

json_str2 = json.dumps(py_dict)

print(json_str2)

# Output
{"books": [{"title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908"}, 
{"title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927"}], 
"movies": [{"title": "The Imitation Game", "year": "2014", "lang": "en", "watched": true}]}

Como puede ver en el ejemplo anterior, la cadena JSON de salida es difícil de leer sin el formato adecuado. Puede usar la sangría de parámetro opcional para agregar sangría.

Y puede hacer esto configurando la sangría en un número entero como 2, como se muestra a continuación:

json_str2 = json.dumps(py_dict, indent = 2)
print(json_str2)

# Output
{
  "books": [
    {
      "title": "The Wind in the Willows",
      "author": "Kenneth Grahame",
      "year": "1908"
    },
    {
      "title": "To the Lighthouse",
      "author": "Virginia Woolf",
      "year": "1927"
    }
  ],
  "movies": [
    {
      "title": "The Imitation Game",
      "year": "2014",
      "lang": "en",
      "watched": true
    }
  ]
}

Observe cómo se ha formateado la salida con sangría, y es fácil de seguir.

Nota: 💡 Si desea que las claves se clasifiquen en orden alfabético, puede establecer el parámetro sort_keys en True.

Como puede ver en el fragmento de código a continuación, las claves ahora se han ordenado en orden alfabético.

json_str2 = json.dumps(py_dict, indent = 2, sort_keys=True)
print(json_str2)

# Output
{
  "books": [
    {
      "author": "Kenneth Grahame",
      "title": "The Wind in the Willows",
      "year": "1908"
    },
    {
      "author": "Virginia Woolf",
      "title": "To the Lighthouse",
      "year": "1927"
    }
  ],
  "movies": [
    {
      "lang": "en",
      "title": "The Imitation Game",
      "watched": true,
      "year": "2014"
    }
  ]

Y las claves ahora aparecen en orden alfabético: “autor”, “título” y “año”.

Hasta ahora, ha aprendido a trabajar con cadenas JSON en Python. En la siguiente sección, aprenderá a trabajar con archivos JSON.

Cómo leer un archivo JSON en Python

Para leer un archivo JSON en Python, use la siguiente sintaxis:

json.load(<json-file>) 

# where <json-file> is any valid JSON file.

Observe cómo usamos el método load() y no el método loads(). loads() carga una cadena JSON, mientras que load() carga un archivo JSON.

Debería considerar el uso de administradores de contexto cuando trabaje con archivos en Python. También puede intentar leer archivos de la siguiente manera, sin usar el administrador de contexto:

my_file = open('students.json','r')

contents = my_file.read()

print(contents)

file.close()

Si no cierra el archivo, puede haber un desperdicio potencial de recursos.

Sin embargo, cuando se trabaja con administradores de contexto, los archivos se cierran automáticamente una vez que se completan las operaciones de archivo.

Y puede usar el administrador de contexto para leer archivos, como se muestra a continuación:

with open('students.json','r') as file:   
   data = json.load(file) 
   print(data) 

# Output 

{'students': [{'roll_num': 'cs27', 'name': 'Anna', 'course': 'CS'}, 
{'roll_num': 'ep30', 'name': 'Kate', 'course': 'PHY'}]}

Mientras lee de un archivo, especifique el modo como lectura, indicado por ‘r’ en el código anterior.

Nota: para navegar fácilmente por el directorio actual, asegúrese de que el archivo JSON esté en la misma carpeta que main.py, como se muestra en la imagen a continuación. Si su archivo JSON está en una carpeta diferente, asegúrese de especificar la ruta al archivo.

Lea el archivo JSON en Python.

En la siguiente sección, aprenderá a escribir en un archivo JSON.✍

Cómo escribir en un archivo JSON en Python

Para escribir en un archivo JSON existente o para crear un nuevo archivo JSON, use el método dump() como se muestra:

json.dump(<dict_obj>,<json_file>)

# where <dict_obj> is a Python dictionary 

# and <json_file> is the JSON file 

Entonces, la sintaxis anterior vuelca el diccionario en el archivo JSON .

En la sección anterior, teníamos el diccionario py_dict. Ahora vamos a volcar eso en un nuevo archivo JSON. Y llamémoslo new_file.json.

Y la siguiente celda de código muestra cómo puede usar la función dump():

with open('new_file.json','w') as file:
  json.dump(py_dict,file)

Nota: al abrir un archivo en el modo de escritura (w), se sobrescribe el contenido si el archivo existe. Si el archivo no existe, se crea el archivo.

Después de ejecutar la celda de código anterior, verá que se ha creado un nuevo archivo JSON en el directorio de trabajo actual. Y puede continuar y examinar el contenido del archivo JSON.

Crear archivo JSON en Python

Al escribir en archivos, el objetivo clave es el almacenamiento de datos. Y si desea conservar el formato, también puede usar los parámetros sangría y sort_keys.

Conclusión

⏲ ​​Es hora de un resumen rápido.

En este tutorial, has aprendido:

  • los conceptos básicos del uso de JSON,
  • cómo usar los métodos loads() y load() para leer cadenas JSON y archivos JSON respectivamente,
  • cómo utilizar los métodos dumps() y dump() para volcar los diccionarios de Python en cadenas JSON y archivos JSON respectivamente.

Espero que hayas encontrado útil este tutorial. ¡Feliz aprendizaje!

También puede consultar las Herramientas JSON para analizar, formatear y validar.