วิธีการถ่ายโอน dict ไปยังไฟล์ json?


239

ฉันมีพจน์แบบนี้:

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

ฉันไม่สามารถหาวิธีถ่ายโอน dict ไปยังjsonไฟล์ดังที่แสดงด้านล่าง

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

มีวิธี pythonic ทำเช่นนี้?

คุณอาจเดาว่าฉันต้องการสร้างd3ทรีแมป

คำตอบ:


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

นี่เป็นวิธีที่ทำได้ง่ายกว่า

ในบรรทัดที่สองของรหัสไฟล์ได้รับการสร้างขึ้นและเปิดเป็นตัวแปรresult.jsonfp

ในบรรทัดที่สาม Dict ของคุณsampleจะถูกเขียนลงในresult.json!


1
@ เดนมาร์กไม่รู้ หากไม่มีคำถามเกี่ยวกับปัญหาของคุณอยู่แล้วคุณควรสร้างคำถามใหม่ที่อธิบายถึงปัญหาของคุณ (BTW, im เพียงบรรณาธิการของโพสต์นั้น)
แฟร์ขัดแย้ง

8
เคล็ดลับ: หากคุณไม่ต้องการเขียนไฟล์และเห็นเฉพาะผลลัพธ์ให้ลองเปลี่ยนเส้นทางไปที่ stdout: json.dump('SomeText', sys.stdout)
Arindam Roychowdhury

1
@ Dan-ish คุณลอง json.dump แล้ว (ตัวอย่าง, fp, sort_keys = False)? สมมติว่าฉันเข้าใจสิ่งที่คุณหมายถึง
Chris Larson

3
สิ่งที่ดีที่ต้องจำไว้ที่นี่คือถ้าคุณไม่ใช้OrderedDict(หลาม> 2.7) ไม่มีการรับประกันว่าจะมีการสั่งซื้อกุญแจในลักษณะใด ๆ
ฟอร์ดพรีเฟ็

1
มันโยน "ทิ้ง () ใช้เวลา 1 ข้อโต้แย้งตำแหน่ง แต่ได้รับ 2" ข้อผิดพลาด
วีเจย์ Nirmal

40

รวมคำตอบของ @mgilson และ @gnibbler ฉันพบสิ่งที่ฉันต้องการคือ:


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

ด้วยวิธีนี้ฉันได้รับไฟล์ json ที่พิมพ์ออกมาสวย พบเทคนิคprint >> f, jได้จากที่นี่: http://www.anthonydebarros.com/2012/03/11/generate-json-from-sql-using-python/


16
print(j, file=f)ใน Python 3.6 (แทนprint >> f, j)
mjkrause

print(j, file=f)ไม่ได้ผลสำหรับฉันฉันไม่ต้องการทำส่วน J ด้วย d = {'a':1, 'b':2} print(d, file=open('sample.json', 'wt'))ทำงาน
HS Rathore

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

แน่นอนมันไม่น่าเป็นไปได้ที่คำสั่งจะถูกเก็บรักษาไว้อย่างแน่นอน ... แต่นั่นเป็นเพียงลักษณะของพจนานุกรม ...


6
json_string = json.dumps (d,, sort_keys = True) หากต้องการเรียงลำดับ
Chris Larson

13

สิ่งนี้จะช่วยให้คุณเริ่มต้นได้

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

ด้วยรูปแบบสวยพิมพ์:

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)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.