Come scaricare un dict in un file json?


239

Ho un detto come questo:

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

Non riesco a capire come scaricare il dict in un jsonfile come mostrato di seguito:

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

C'è un modo pitonico per farlo?

Potresti indovinare che voglio generare una mappa ad d3albero.

Risposte:


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

Questo è un modo più semplice per farlo.

Nella seconda riga di codice il file result.jsonviene creato e aperto come variabile fp.

Nella terza riga il tuo dict sampleviene scritto nel result.json!


1
@ Danese Non lo so. A meno che non ci sia già una domanda su SO sul tuo problema, dovresti creare una nuova domanda che descriva il tuo problema. (a proposito, sono semplicemente un editore di quei post)
Paradosso di Fermi,

8
Suggerimento: se non si desidera scrivere su un file e vedere solo l'output, provare a reindirizzarlo a stdout: json.dump('SomeText', sys.stdout)
Arindam Roychowdhury

1
@ Dan-ish Hai provato json.dump (sample, fp, sort_keys = False)? Supponendo che capisco cosa intendi.
Chris Larson il

3
La cosa buona da ricordare qui è che, a meno che non si usi un OrderedDict(python> 2.7), non vi è alcuna garanzia che le chiavi siano ordinate in un modo particolare
ford prefect

1
Genera "dumps () accetta 1 argomento posizionale ma sono stati dati 2 errori"
Vijay Nirmal

40

Combina la risposta di @mgilson e @gnibbler, ho scoperto che ciò di cui avevo bisogno era 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 ottenuto un file json piuttosto carino. I trucchi print >> f, jsi trovano da qui: http://www.anthonydebarros.com/2012/03/11/generate-json-from-sql-using-python/


16
print(j, file=f)in Python 3.6 (invece di print >> f, j)
mjkrause il

print(j, file=f)non ha funzionato per me, non avevo bisogno di fare anche la parte J. d = {'a':1, 'b':2} print(d, file=open('sample.json', 'wt'))lavorato.
HS Rathore,

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

Certo, è improbabile che l'ordine venga esattamente conservato ... Ma questa è solo la natura dei dizionari ...


6
json_string = json.dumps (d,, sort_keys = True) se si desidera ordinare.
Chris Larson il

13

Questo dovrebbe darti 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
    }
]

1

con formato grazioso:

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)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.