Comment vider un dict dans un fichier json?


239

J'ai un dict comme celui-ci:

sample = {'ObjectInterpolator': 1629,  'PointInterpolator': 1675, 'RectangleInterpolator': 2042}

Je ne peux pas comprendre comment vider le dict dans un jsonfichier comme indiqué ci-dessous:

{      
    "name": "interpolator",
    "children": [
      {"name": "ObjectInterpolator", "size": 1629},
      {"name": "PointInterpolator", "size": 1675},
      {"name": "RectangleInterpolator", "size": 2042}
     ]
}

Existe-t-il un moyen pythonique de le faire?

Vous pouvez deviner que je veux générer un d3treemap.

Réponses:


413
import json
with open('result.json', 'w') as fp:
    json.dump(sample, fp)

C'est un moyen plus simple de le faire.

Dans la deuxième ligne de code, le fichier result.jsonest créé et ouvert en tant que variable fp.

Dans la troisième ligne, votre dict sampleest écrit dans le result.json!


1
@Danish Je ne sais pas. À moins qu'il n'y ait déjà une question sur SO concernant votre problème, vous devez créer une nouvelle question décrivant votre problème. (btw, je suis simplement un éditeur de ces messages)
Fermi paradox

8
Astuce: Si vous ne voulez pas écrire dans un fichier et ne voir que la sortie, essayez de le rediriger vers stdout: json.dump('SomeText', sys.stdout)
Arindam Roychowdhury

1
@ Dan-ish Avez-vous essayé json.dump (sample, fp, sort_keys = False)? En supposant que je comprends ce que vous voulez dire.
Chris Larson

3
Une bonne chose à retenir ici est qu'à moins que vous n'utilisiez un OrderedDict(python> 2.7), il n'y a aucune garantie que les clés soient commandées d'une manière particulière
ford prefect

1
Il lance "dumps () prend 1 argument positionnel mais 2 ont été donnés" erreur
Vijay Nirmal

40

Combinez la réponse de @mgilson et @gnibbler, j'ai trouvé ce dont j'avais besoin:


d = {"name":"interpolator",
     "children":[{'name':key,"size":value} for key,value in sample.items()]}
j = json.dumps(d, indent=4)
f = open('sample.json', 'w')
print >> f, j
f.close()

De cette façon, j'ai obtenu un joli fichier json. Les astuces print >> f, jse trouvent ici: http://www.anthonydebarros.com/2012/03/11/generate-json-from-sql-using-python/


16
print(j, file=f)en Python 3.6 (au lieu de print >> f, j)
mjkrause

print(j, file=f)n'a pas fonctionné pour moi, je n'avais pas besoin de faire la partie J aussi. d = {'a':1, 'b':2} print(d, file=open('sample.json', 'wt'))travaillé.
HS Rathore

21
d = {"name":"interpolator",
     "children":[{'name':key,"size":value} for key,value in sample.items()]}
json_string = json.dumps(d)

Bien sûr, il est peu probable que l'ordre soit exactement préservé ... Mais c'est juste la nature des dictionnaires ...


6
json_string = json.dumps (d,, sort_keys = True) si l'ordre de tri est souhaité.
Chris Larson

13

Cela devrait vous donner un début

>>> import json
>>> print json.dumps([{'name': k, 'size': v} for k,v in sample.items()], indent=4)
[
    {
        "name": "PointInterpolator",
        "size": 1675
    },
    {
        "name": "ObjectInterpolator",
        "size": 1629
    },
    {
        "name": "RectangleInterpolator",
        "size": 2042
    }
]

1

avec un joli format d'impression:

import json

with open(path_to_file, 'w') as file:
    json_string = json.dumps(sample, default=lambda o: o.__dict__, sort_keys=True, indent=2)
    file.write(json_string)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.