Nasıl bir json dosyasına bir dump dökümü?


239

Böyle bir kararım var:

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

Ben jsonaşağıda gösterildiği gibi bir dosyaya dict dökümü nasıl anlayamıyorum :

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

Bunu yapmanın pythonic bir yolu var mı?

Bir d3treemap oluşturmak istediğimi tahmin edebilirsiniz.

Yanıtlar:


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

Bunu yapmanın daha kolay bir yoludur.

İkinci kod satırında dosya result.jsondeğişken olarak oluşturulur ve açılır fp.

Üçüncü satırda, dict'iniz sampleyazılır result.json!


1
@Danish Bilmiyorum. Sorununuzla ilgili SO üzerinde zaten bir soru olmadığı sürece, sorununuzu açıklayan yeni bir soru oluşturmanız gerekir. (btw, im sadece bu yazıların bir editörüyüm)
Fermi paradoks

8
İpucu: Bir dosyaya yazmak istemiyorsanız ve yalnızca çıktıyı görmek istiyorsanız, dosyayı yeniden yönlendirmeyi deneyin stdout: json.dump('SomeText', sys.stdout)
Arindam Roychowdhury 14:16

1
@ Dan-ish json.dump (örnek, fp, sort_keys = Yanlış) denediniz mi? Ne demek istediğini anladığımı varsayarsak.
Chris Larson

3
Burada hatırlanması gereken iyi bir şey, bir OrderedDict(python> 2.7) kullanmadığınız sürece , anahtarların herhangi bir şekilde sipariş edildiğinin garantisi yoktur
ford prefect

1
"Dumps () 1 konumsal argüman alır ama 2 verildi" hatası atıyor
Vijay Nirmal

40

@Mgilson ve @gnibbler cevabını birleştirin, ihtiyacım olan şey şu oldu:


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

Bu şekilde, oldukça basılı bir json dosyası aldım. Hileler print >> f, jburada bulunur: http://www.anthonydebarros.com/2012/03/11/generate-json-from-sql-using-python/


16
print(j, file=f)3.6 (yerine print >> f, j) yerine
mjkrause

print(j, file=f)benim için çalışmadı, ben de J kısmını yapmak zorunda değildi. d = {'a':1, 'b':2} print(d, file=open('sample.json', 'wt'))çalıştı.
HS Rathore

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

Elbette, düzenin tam olarak korunacağı pek olası değil ... Ama bu sadece sözlüklerin doğası ...


6
Sıralı sıra isteniyorsa json_string = json.dumps (d,, sort_keys = True).
Chris Larson

13

Bu size bir başlangıç ​​yapmalı

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

güzel baskı formatı ile:

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)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.