Manejo de datos JSON en Python

PythonPythonBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

JSON (JavaScript Object Notation) es un formato de datos popular para almacenar datos en una forma serializada y legible para humanos. Se utiliza comúnmente para transmitir datos entre un servidor y una aplicación web y también es una gran opción para almacenar datos en una base de datos NoSQL. En Python, podemos utilizar el módulo json para trabajar con datos JSON.

Logros

  • Leer y escribir archivos JSON
  • Serializar y deserializar datos JSON

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/FileHandlingGroup(["File Handling"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python/DataStructuresGroup -.-> python/dictionaries("Dictionaries") python/ModulesandPackagesGroup -.-> python/standard_libraries("Common Standard Libraries") python/FileHandlingGroup -.-> python/file_reading_writing("Reading and Writing Files") python/FileHandlingGroup -.-> python/with_statement("Using with Statement") python/PythonStandardLibraryGroup -.-> python/data_collections("Data Collections") python/PythonStandardLibraryGroup -.-> python/data_serialization("Data Serialization") subgraph Lab Skills python/dictionaries -.-> lab-85{{"Manejo de datos JSON en Python"}} python/standard_libraries -.-> lab-85{{"Manejo de datos JSON en Python"}} python/file_reading_writing -.-> lab-85{{"Manejo de datos JSON en Python"}} python/with_statement -.-> lab-85{{"Manejo de datos JSON en Python"}} python/data_collections -.-> lab-85{{"Manejo de datos JSON en Python"}} python/data_serialization -.-> lab-85{{"Manejo de datos JSON en Python"}} end

Introducción a JSON

JSON (JavaScript Object Notation) es un formato ligero de intercambio de datos que es fácil de leer y escribir para los humanos y fácil de analizar y generar para las máquinas. Está basado en un subconjunto del Lenguaje de Programación JavaScript, Standard ECMA-262 3ra Edición - Diciembre de 1999. JSON es un formato de texto que es completamente independiente del lenguaje, pero utiliza convenciones que son familiares para los programadores de los lenguajes de la familia C, incluyendo C, C++, C#, Java, JavaScript, Perl, Python y muchos otros. Estas propiedades hacen que JSON sea un lenguaje ideal de intercambio de datos.

La estructura básica de JSON consta de objetos, que son colecciones de pares clave-valor, y arrays, que son listas ordenadas de valores.

Aquí hay un ejemplo de un objeto JSON:

{
  "name": "Alice",
  "age": 26,
  "city": "New York"
}

Este objeto JSON tiene tres pares clave-valor:

  • "name" : "Alice"
  • "age" : 26
  • "city" : "New York"

Aquí hay un ejemplo de un array JSON:

["apple", "banana", "cherry"]

Este array JSON tiene tres valores: "apple", "banana" y "cherry".

Un objeto JSON puede contener múltiples pares clave-valor y arrays, y un array JSON puede contener múltiples objetos y arrays. Aquí hay un ejemplo de una estructura JSON más compleja:

{
  "employees": [
    { "firstName": "John", "lastName": "Doe" },
    { "firstName": "Anna", "lastName": "Smith" },
    { "firstName": "Peter", "lastName": "Jones" }
  ],
  "owners": [
    { "name": "Alice", "age": 30 },
    { "name": "Bob", "age": 35 }
  ],
  "office": {
    "name": "Acme Inc.",
    "location": "New York"
  }
}

Este objeto JSON tiene tres pares clave-valor:

  • "employees" : un array de objetos de empleados
  • "owners" : un array de objetos de propietarios
  • "office" : un objeto de oficina

Módulo json

Para analizar un objeto JSON en Python, podemos utilizar el módulo json. El módulo json es parte de la biblioteca estándar de Python, por lo que no es necesario instalarlo por separado.

Abra una nueva sesión del intérprete de Python y escriba el siguiente código:

python3

Aquí hay un ejemplo de cómo analizar el objeto JSON del ejemplo anterior:

import json

json_strings = '{"employees": [{ "firstName": "John", "lastName": "Doe"}, ], "owners": [{ "name": "Alice", "age": 30 }, { "name": "Bob", "age": 35 }], "office": {"name": "Acme Inc."}}'

## Analizar el objeto JSON
data = json.loads(json_strings)

## Acceder a los datos
employees = data['employees']
owners = data['owners']
office = data['office']

## Imprimir los datos
print(employees)
print(owners)
print(office)

Esto imprimirá lo siguiente:

[{'firstName': 'John', 'lastName': 'Doe'}]
[{'name': 'Alice', 'age': 30}, { "name": "Bob", "age": 35 }]
{'name': 'Acme Inc.'}

Luego puede acceder a los datos en el objeto JSON utilizando claves e índices, al igual que lo haría con un diccionario o lista de Python. Por ejemplo, para acceder al nombre del primer empleado, puede utilizar el siguiente código:

first_employee = employees[0]
first_name = first_employee['firstName']
print(first_name)

Esto imprimirá lo siguiente:

John

También puede recorrer los arrays y acceder a los datos de cada elemento. Por ejemplo, para imprimir el nombre y la edad de cada propietario, puede utilizar el siguiente código:

for owner in owners:
  name = owner['name']
  age = owner['age']
  print(f'{name} tiene {age} años.')

Esto imprimirá lo siguiente:

Alice tiene 30 años.
Bob tiene 35 años.

Leyendo archivos JSON

Comencemos leyendo un archivo JSON. Supongamos que tenemos un archivo employees.json con el siguiente contenido:

{
  "employees": [
    {
      "firstName": "John",
      "lastName": "Doe"
    },
    {
      "firstName": "Anna",
      "lastName": "Smith"
    },
    {
      "firstName": "Peter",
      "lastName": "Jones"
    }
  ]
}

employees.json ya existe en /home/labex/project.

Para leer este archivo en Python, podemos utilizar el siguiente código:

import json

## Abrir el archivo
with open('/home/labex/project/employees.json', 'r') as file:
  ## Cargar el contenido del archivo en una variable
  data = json.load(file)

## Imprimir el contenido del archivo
print(data)

Esto imprimirá lo siguiente:

{'employees': [{'firstName': 'John', 'lastName': 'Doe'}, {'firstName': 'Anna', 'lastName': 'Smith'}, {'firstName': 'Peter', 'lastName': 'Jones'}]}

Podemos acceder a los datos del archivo utilizando las claves del objeto JSON, al igual que lo haríamos con un diccionario de Python. Por ejemplo, para acceder a la lista de empleados, podemos utilizar la clave employees:

employees = data['employees']
print(employees)

Esto imprimirá lo siguiente:

[{'firstName': 'John', 'lastName': 'Doe'}, {'firstName': 'Anna', 'lastName': 'Smith'}, {'firstName': 'Peter', 'lastName': 'Jones'}]

También podemos recorrer la lista de empleados e imprimir sus nombres:

for employee in employees:
  print(employee['firstName'], employee['lastName'])

Esto imprimirá lo siguiente:

John Doe
Anna Smith
Peter Jones

Escribiendo archivos JSON

Ahora que sabemos cómo leer un archivo JSON, aprendamos cómo escribir en uno. Podemos utilizar la función json.dump() para escribir datos en un archivo JSON.

Supongamos que tenemos una lista de diccionarios que contiene información sobre estudiantes. Podemos escribir estos datos en un archivo llamado students.json de la siguiente manera:

import json

## Una lista de diccionarios
students = [
  { "name": "Alice", "age": 26, "major": "Computer Science" },
  { "name": "Bob", "age": 27, "major": "Economics" },
  { "name": "Charlie", "age": 25, "major": "Physics" }
]

## Abrir el archivo
with open('students.json', 'w') as file:
  ## Escribir los datos en el archivo
  json.dump(students, file)

Ahora veamos si los datos se escribieron correctamente:

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

Esto imprimirá lo siguiente:

[
  { "name": "Alice", "age": 26, "major": "Computer Science" },
  { "name": "Bob", "age": 27, "major": "Economics" },
  { "name": "Charlie", "age": 25, "major": "Physics" }
]

También podemos utilizar la función json.dumps() para convertir un objeto de Python en una cadena JSON, que luego podemos guardar en un archivo o enviar a través de la red. Aquí hay un ejemplo:

## Convertir la lista de diccionarios en una cadena JSON
json_string = json.dumps(students)
print(json_string)

## Guardar la cadena en un archivo
with open('students.json', 'w') as file:
  file.write(json_string)

## Ahora veamos si los datos se escribieron correctamente
with open('students.json', 'r') as file:
  data = json.load(file)
  print(data)

Esto tendrá la misma salida que el ejemplo anterior.

Objeto de Python y Cadena JSON

Un objeto de Python es una colección de datos en forma de listas, diccionarios, etc. que se almacena en la memoria. En cambio, una cadena JSON es una representación serializada de un objeto JSON. Es una cadena de caracteres que representa los datos en el objeto JSON, pero no se almacena en la memoria como un objeto real.

Aquí hay un ejemplo de cómo usar la función read() para leer el contenido de students.json:

with open('students.json', 'r') as file:
  json_string = file.read()
  print(json_string)

Esto imprimirá lo siguiente:

[{"name": "Alice", "age": 26, "major": "Computer Science"}, {"name": "Bob", "age": 27, "major": "Economics"}, {"name": "Charlie", "age": 25, "major": "Physics"}]

Cuando intentes obtener el primer elemento de json_string, obtendrás el primer carácter de la cadena:

print(json_string[0])
[

Esto se debe a que json_string es una cadena, no una lista (objeto de Python). Para convertirla en una lista, podemos usar la función json.loads():

import json

## Convertir la cadena JSON en un objeto de Python
python_object = json.loads(json_string)
print(python_object)

La salida es similar a la anterior, con la diferencia entre comillas simples y dobles.

[{'name': 'Alice', 'age': 26,'major': 'Computer Science'}, {'name': 'Bob', 'age': 27,'major': 'Economics'}, {'name': 'Charlie', 'age': 25,'major': 'Physics'}]

Ahora podemos acceder al primer elemento de la lista:

print(python_object[0])
{ "name": "Alice", "age": 26, "major": "Computer Science" }

Los principiantes a menudo confunden el objeto de Python y la cadena JSON, así que presta especial atención.

Resumen

¡Felicidades! Has completado el laboratorio sobre archivos JSON. Has aprendido cómo leer y escribir archivos JSON en Python. También has aprendido cómo trabajar con datos JSON en Python.