Bagaimana cara membuang dict ke file json?

239

Saya punya dict seperti ini:

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

Saya tidak tahu cara membuang dikt ke jsonfile seperti yang ditunjukkan di bawah ini:

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

Apakah ada cara pythonic untuk melakukan ini?

Anda mungkin menebak bahwa saya ingin membuat d3treemap.

holys
sumber

Jawaban:

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

Ini adalah cara yang lebih mudah untuk melakukannya.

Pada baris kedua kode file result.jsondibuat dan dibuka sebagai variabel fp.

Di baris ketiga, dikte Anda sampleakan ditulis ke dalam result.json!

moobi
sumber
1
@ Bahasa Spanyol Tidak tahu. Kecuali jika sudah ada pertanyaan tentang masalah Anda di SO, Anda harus membuat pertanyaan baru yang menjelaskan masalah Anda. (btw, saya hanyalah editor dari posting itu)
Fermi paradox
8
Kiat: Jika Anda tidak ingin menulis ke file, dan hanya melihat hasilnya, coba arahkan kembali ke stdout: json.dump('SomeText', sys.stdout)
Arindam Roychowdhury
1
@ Dan-ish Sudahkah Anda mencoba json.dump (sample, fp, sort_keys = False)? Dengan asumsi saya mengerti maksud Anda.
Chris Larson
3
Hal yang baik untuk diingat di sini adalah bahwa kecuali Anda menggunakan OrderedDict(python> 2,7) tidak ada jaminan bahwa kunci dipesan dengan cara tertentu
ford prefek
1
Itu melempar "kesedihan () mengambil 1 argumen posisi tetapi 2 diberi" kesalahan
Vijay Nirmal
40

Kombinasikan jawaban @mgilson dan @gnibbler, saya menemukan yang saya butuhkan adalah ini:


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

Dengan cara ini, saya mendapat file json yang cukup-cetak. Trik-trik print >> f, jini ditemukan dari sini: http://www.anthonydebarros.com/2012/03/11/generate-json-from-sql-using-python/

holys
sumber
16
print(j, file=f)dalam Python 3.6 (bukan print >> f, j)
mjkrause
print(j, file=f)tidak bekerja untuk saya, saya tidak perlu melakukan bagian J juga. d = {'a':1, 'b':2} print(d, file=open('sample.json', 'wt'))bekerja.
HS Rathore
21
d = {"name":"interpolator",
     "children":[{'name':key,"size":value} for key,value in sample.items()]}
json_string = json.dumps(d)

Tentu saja, tidak mungkin bahwa urutannya akan dipertahankan ... Tapi itu hanya sifat kamus ...

mgilson
sumber
6
json_string = json.dumps (d,, sort_keys = True) jika diinginkan urutan.
Chris Larson
13

Ini akan memberi Anda awal

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

dengan format cetak cantik:

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)
jmhostalet
sumber