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.

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!


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/


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 ...


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
    }
]

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)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.