367

我有一个这样的字典:

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树形图。

4

7 回答 7

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

这是一种更简单的方法。

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

在第三行中,您的 dictsample被写入result.json!

于 2014-09-26T10:22:42.197 回答
53

结合@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/

于 2013-06-12T08:17:19.837 回答
25
d = {"name":"interpolator",
     "children":[{'name':key,"size":value} for key,value in sample.items()]}
json_string = json.dumps(d)

当然,订单不太可能完全保留……但这只是字典的性质……

于 2013-06-11T12:18:05.530 回答
18

这应该给你一个开始

>>> 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
    }
]
于 2013-06-11T12:17:45.930 回答
12

具有漂亮的打印格式:

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)
于 2020-05-04T06:37:34.610 回答
9

还想添加这个(Python 3.7)

import json

with open("dict_to_json_textfile.txt", 'w') as fout:
    json_dumps_str = json.dumps(a_dictionary, indent=4)
    print(json_dumps_str, file=fout)

更新(11-04-2021):所以我添加这个示例的原因是因为有时您可以使用该print()函数写入文件,这也显示了如何使用缩进(不缩进的东西是邪恶的!!)。然而,我最近开始学习线程,我的一些研究表明该print()语句并不总是线程安全的。所以如果你需要线程,你可能要小心这个。

于 2020-08-13T14:54:33.930 回答
3

如果您正在使用Path

example_path = Path('/tmp/test.json')
example_dict = {'x': 24, 'y': 25}
json_str = json.dumps(example_dict, indent=4) + '\n'
example_path.write_text(json_str, encoding='utf-8')
于 2020-09-10T15:28:35.823 回答