我有一个这样的字典:
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
树形图。
import json
with open('result.json', 'w') as fp:
json.dump(sample, fp)
这是一种更简单的方法。
在第二行代码中,文件 result.json
被创建并作为变量 fp
打开。
在第三行中,您的 dict sample
被写入 result.json
!
结合@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/
print(j, file=f)
(而不是 print >> f, j
)
print(j, file=f)
对我不起作用,我也不需要做 J 部分。 d = {'a':1, 'b':2} print(d, file=open('sample.json', 'wt'))
工作。
indent
创建格式化转储:json.dump(content, file, indent=4)
d = {"name":"interpolator",
"children":[{'name':key,"size":value} for key,value in sample.items()]}
json_string = json.dumps(d)
当然,订单不太可能完全保留……但这只是字典的性质……
这应该给你一个开始
>>> 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
}
]
具有漂亮的打印格式:
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)
dump(sample, file, ...)
。不需要写入字符串的额外步骤。 dump
在内部以块的形式写入。这可能比先编译一个(可能很大的)字符串更有效。
还想添加这个(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()
语句并不总是线程安全的。所以如果你需要线程,你可能要小心这个。
如果您使用 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')
stdout: json.dump('SomeText', sys.stdout)
OrderedDict
(python >2.7),否则无法保证键以任何特定方式排序dump
(不是dumps
)。