web-dev-qa-db-fra.com

Python dump le dict en fichier json

J'ai un dict comme ça:

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

Je n'arrive pas à comprendre comment vider le dict dans un fichier json, 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 treemap d3.

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

C'est un moyen plus facile de le faire.

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

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

297
moobi

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


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()

C’est ainsi que j’ai un fichier json joliment imprimé. Les astuces print >> f, j se trouvent ici: http://www.anthonydebarros.com/2012/03/11/generate-json-from-sql-using-python/

30
holys
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 ce n'est que la nature des dictionnaires ...

21
mgilson

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
    }
]
12
John La Rooy