2013-06-11 17 views
85

Ho un dict come questo:Python discarica dict in file JSON

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

Non riesco a capire come discarica il dict in un file json come mostrato di seguito:

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

è c'è un modo pitodico per fare questo?

Si può supporre di voler generare una treemap d3.

risposta

8

Questo dovrebbe dare un inizio

>>> 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 
    } 
] 
15
d = {"name":"interpolator", 
    "children":[{'name':key,"size":value} for key,value in sample.items()]} 
json_string = json.dumps(d) 

Naturalmente, è improbabile che l'ordine sarà esattamente conservato ... Ma questa è solo la natura dei dizionari ...

+3

json_string = json.dumps (d,, sort_keys = True) se si desidera ordinare l'ordine. –

16

Combina la risposta di @mgilson e @gnibbler, ho trovato quello che mi serve è stato questo:

 

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

in questo modo, ho avuto una bella -print file json. I trucchi print >> f, j è situato qui: http://www.anthonydebarros.com/2012/03/11/generate-json-from-sql-using-python/

+0

'print (j, file = f)' in Python 3.6 (invece di 'print >> f, j') – mjkrause

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

Si tratta di un modo più semplice per farlo.

Nella seconda riga del codice il file result.json viene creato e aperto come variabile fp.

Nella terza riga il vostro dict sample viene scritto nello result.json!

+0

@Fermi il risultato JSON è ordinato uno.come posso fermare questo ordinamento mentre lo scarico in un JSON –

+0

@ Danese Non so. A meno che non ci sia già una domanda su SO del tuo problema, dovresti creare una nuova domanda che descriva il tuo problema. (btw, sono semplicemente un editore di quei post) –

+0

Anche io non lo so. Basta fare una nuova domanda come quella proposta da Fermi. – moobi