Create an account


Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Tut] Cómo agregar datos a un archivo JSON en Python [+Vídeo]

#1
Cómo agregar datos a un archivo JSON en Python [+Vídeo]




Switch to English Version

Planteamiento del problema


Dado un objeto JSON almacenado en un archivo llamado "your_file.json", como una lista de diccionarios. ¿Cómo se pueden anexar datos, como un nuevo diccionario?

# File "your_file.json" (BEFORE)
[{"alice": 24, "bob": 27}] # New entry:
{"carl": 33} # File "your_file.json" (AFTER)
[{"alice": 24, "bob": 27}, {"carl": 33}]

Método 1: uso de json.load(file) y json.dump(data, file)


Para actualizar un objeto JSON en un archivo, importa la biblioteca json, lee el archivo con json.load(file), añade la nueva entrada a la lista o al diccionario de la estructura de datos data, y escribe el objeto JSON actualizado con json.dump(data, file).

En concreto, aquí están los cuatro pasos específicos para actualizar un archivo JSON existente con una nueva entrada:

  1. Importar la biblioteca json con import json
  2. Lee el archivo JSON en una estructura de datos utilizando data = json.load(file) tras abrir el archivo con open(filename, "r") en modo de lectura "r". Llegados a este punto, tienes los datos JSON en tu código Python como un diccionario o una lista (según el aspecto de tus datos – echa un vistazo a la tabla de conversión más abajo).
  3. Actualiza la estructura de datos de Python con la nueva entrada (por ejemplo, un nuevo diccionario para anexar a la lista).
  4. Escribe el JSON data actualizado de vuelta al archivo JSON utilizando json.dump(data, file) después de abrir el archivo en modo de escritura utilizando open(filename, "w").
import json filename = 'your_file.json'
entry = {'carl': 33} # 1. Read file contents
with open(filename, "r") as file: data = json.load(file) # 2. Update json object
data.append(entry) # 3. Write json file
with open(filename, "w") as file: json.dump(data, file)

De hecho, al utilizar el método json.load(), el objeto Python devuelto se convierte del formato JSON utilizando esta tabla de conversión:


JSON Python
object dict
array list
string str
number (int) int
number (real) float
true True
false False
null None

Para conocer mejor las estructuras de datos más importantes, como el diccionario de Python, puedes consultar la Academia de Informática Finxter:

El curso es gratuito para todos los miembros premium de Finxter.

Método 2: abrir el archivo sólo una vez restableciendo el puntero del archivo


En lugar de abrir el objeto archivo dos veces, puedes abrirlo sólo una vez y restablecer el puntero del archivo mediante file.seek(0) para sobrescribir el contenido del archivo existente siguiendo estos cuatro pasos:

  1. Utiliza open("your_file.json", "r+") para crear un objeto archivo en modo de lectura y escritura "r+".
  2. Llama a json.load(file) para cargar los datos del archivo en tu código Python. Ahora puedes actualizar los datos en tu código Python. Por ejemplo, si tu archivo JSON está estructurado como una lista de diccionarios, simplemente anexa un nuevo diccionario.
  3. Utiliza file.seek(0) para restablecer el puntero del archivo a la posición 0, de modo que puedas sobrescribirlo en lugar de anexar de nuevo todo el objeto JSON.
  4. Llama a json.dump(data, file) para sobrescribir file con data.

Este es el código concreto:

import json filename = 'your_file.json'
# Old JSON File:
# [{"alice": 24, "bob": 27}] entry = {'carl': 33} with open(filename, "r+") as file: data = json.load(file) data.append(entry) file.seek(0) json.dump(data, file) # New JSON file: # [{"alice": 24, "bob": 27}, {"carl": 33}]

Método 3: crear un archivo JSON inicial y actualizarlo posteriormente


Si todavía no tienes un archivo JSON, puedes crear primero el archivo a partir de un listado inicial como se indica a continuación:

import json filename = 'your_file.json'
lst = [{'alice': 24, 'bob': 27}] # Write the initial json object (list of dicts)
with open(filename, mode='w') as f: json.dump(lst, f) # Append the new dict to the list and overwrite whole file
with open(filename, mode='w') as f: lst.append({'carl':33}) json.dump(lst, f)

Resumen y discusión


Los tres métodos presentados en este artículo utilizan básicamente la misma idea: llamar a json.dump(data, file) para actualizar un archivo con algunos datos. La variable data puede contener todos los distintos formatos JSON, como una lista de diccionarios o un diccionario.

Si primero necesitas cargar los datos del archivo, utiliza json.load(file) en el objeto archivo abierto en modo lectura.

En general, anexar datos a un archivo JSON no es muy buena idea porque, para cada pequeña actualización, tienes que leer y analizar todo el objeto del archivo. Si tu archivo JSON tiene n entradas, la complejidad en tiempo de ejecución de sólo actualizarlo es O(n).

Un enfoque mejor sería almacenar los datos como un archivo CSV que pudiera leerse línea por línea, lo que simplificaría el análisis y la actualización de forma significativa, ya que sólo habría que anexar una única línea al archivo con una complejidad de ejecución constante.

Gracias por estudiar este artículo, no dudes en consultar mi curso gratuito de Python para mantenerte en forma y mejorar tus conocimientos de Python continuamente, día a día. 🙂

Puedes registrarte gratis aquí:



https://www.sickgaming.net/blog/2022/01/...hon-video/
Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

[-]
Discord

[-]
Active Threads
(Indie Deal) Handy Games, Offworld, Citi...
Last Post: xSicKxBot
Yesterday 10:43 AM
» Replies: 0
» Views: 36
News - Pokemon-With-Guns Game Palworld C...
Last Post: xSicKxBot
Yesterday 10:42 AM
» Replies: 0
» Views: 10
(Xbox 360) Mod Forza Horizon 2 with USB
Last Post: tekashisama
Yesterday 02:45 AM
» Replies: 11
» Views: 10535
[Tut] How to Create a NumPy Array and Fi...
Last Post: xSicKxBot
Yesterday 02:45 AM
» Replies: 0
» Views: 31
(Indie Deal) War Giveaways, Akupara, Hum...
Last Post: xSicKxBot
Yesterday 02:45 AM
» Replies: 0
» Views: 13
News - Death’s Gambit: Afterlife Physica...
Last Post: xSicKxBot
Yesterday 02:44 AM
» Replies: 0
» Views: 15
News - Xbox Game Pass Adding Another Day...
Last Post: xSicKxBot
Yesterday 02:44 AM
» Replies: 0
» Views: 18
[Tut] How To Apply A Function To Each El...
Last Post: xSicKxBot
01-26-2022 04:46 PM
» Replies: 0
» Views: 27
(Indie Deal) Exotic Riddles Bundle, Dyin...
Last Post: xSicKxBot
01-26-2022 04:45 PM
» Replies: 0
» Views: 16
Mobile - Pokémon Sword and Shield myster...
Last Post: xSicKxBot
01-26-2022 04:45 PM
» Replies: 0
» Views: 13

[-]
Twitter



Discord Server © SickGaming.net 2012-2021