如何将字典转储到json文件?


239

我有这样的命令:

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

我不知道如何将字典转储到json文件,如下所示:

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

有python方式可以做到这一点吗?

您可能会猜到我想生成一个d3树形图。

Answers:


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

这是一种更简单的方法。

在第二行代码中,文件result.json被创建并作为变量打开fp

在第三行中,您的字典sample被写入result.json


1
@丹麦人不知道。除非关于您的问题已经有关于SO的问题,否则您应该创建一个描述您的问题的新问题。(顺便说一句,我只是这些帖子的编辑)
费米悖论

8
提示:如果您不想写文件,而只看到输出,请尝试将其重定向到 stdout: json.dump('SomeText', sys.stdout)
Arindam Roychowdhury

1
@ Dan-ish您是否尝试过json.dump(sample,fp,sort_keys = False)?假设我理解你的意思。
克里斯·拉尔森

3
这里要记住的一件好事是,除非您使用OrderedDict(python> 2.7),否则不能保证键会以任何特定方式排序
福特

1
它抛出“ dumps()接受1个位置参数,但给出2个位置参数”错误
Vijay 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拉索尔

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)如果需要排序顺序。
克里斯·拉尔森

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)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.