2 votes

Ecrivez un seul JSON à partir de plusieurs dictionnaires

Je suis en train d'essayer d'écrire plusieurs peut-être 20 dictionnaires dans un seul fichier json en les ajoutant / dumpant un par un dans un fichier JSON, Jusqu'à présent, j'ai fait le code ci-dessous pour accomplir mais je n'y arrive pas. Aide si quelqu'un connaît une meilleure approche

run1 = client.send_get('get_tests/11023')
run2 = client.send_get('get_tests/11038')

with open('result.json', 'w') as fp:
    json.dump(run1, fp)

3voto

Noufal Ibrahim Points 32200

Je ne suis pas sûr que cela soit possible. Que vous attendez-vous à trouver lorsque vous lisez à nouveau le contenu du fichier ?

Lorsque vous lisez quelque chose à partir d'un fichier, il doit s'agir de JSON valide pour pouvoir être chargé. Une option consiste à créer un dictionnaire comme ceci

d = dict(run1 = run1, run2 = run2, ... )

et ensuite json.dump d lui-même dans le fichier.

Mise à jour : Voici un exemple. Cela utilise une liste au lieu d'un dictionnaire (selon votre commentaire) mais l'idée reste la même.

run1 = dict(status = "ok", message = "Tout va bien")
run2 = dict(status = "erreur", message = "Impossible de se connecter")

def save_data(*runs):
   with open("foo.json", "w") as f:
      json.dump(list(runs), f)

def load_data(fname):
   with open(fname) as f:
      return json.load(f)

save_data(run1, run2)
outputs = load_data("foo.json")
print (outputs)

[{'status': 'ok', 'message': 'Tout va bien'}, {'status': 'erreur', 'message': "Impossible de se connecter"}]

3voto

Mostafa Babaii Points 158

Essayez ceci :

run1 = client.send_get('get_tests/11023')
run2 = client.send_get('get_tests/11038')

with open('result.json', 'w') as fp:
    json.dumps({'run1': run1, 'run2': run2}, fp)

Si vous voulez pousser juste un seul dictionnaire dans le fichier, vous devez fusionner run1 et run2 :

run1.update(run2)

Ensuite essayez :

with open('result.json', 'w') as fp:
    json.dumps(run1, fp)

Vous pouvez également essayer ceci :

with open('result.json', 'w') as fp:
    json.dumps({**run1, **run2}, fp)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X