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.