1. 工作场景
同事段工,期望我将提取出的信息,保存为如下协议的形式,提供给他
[
{
id: 1,
info: [
段落
]
},
{
id: 2,
info: [
段落, 列表
]
},
{
id: 3,
info: [
标题
]
}
]
2. 需求分析
最终保存到json中的信息是一个list, 每一个list中的元素代表一条信息,该信息为一个字典。假设res表示我们已经拿到信息,如果直接使用
with open("result.json", "w") as fw:
json.dump(res, fw)
会出现3个问题:
- json中的中文会乱码
- json文件中的内容为一行,无美观的布局
- 无法一定保证保存在json文件中的id是按照顺序从小到大排列
3.解决方案
针对上述三个注意点,需要针对性的增加一些代码。
针对问题1:需要显式的将dump函数中的ensure_ascii设置为False。
with open("result.json", "w") as fw:
json.dump(res, fw, ensure_ascii = False)
针对问题2: 需要显式的设置dump函数中的indent,例如设置为常见的4。
with open("result.json", "w") as fw:
json.dump(res, fw, ensure_ascii = False, indent = 4)
针对问题3:可以在dump之前对集合res中的元素按照id进行排序。
res.sort(key = lambda x: x['id'])
with open("result.json", "w") as fw:
json.dump(res, fw, ensure_ascii = False, indent = 4)
4. 结语
通过上述一些细节的处理,保存的json文件形式才会是需求提出者期望的那样。至此就可以将json文件交付给段工了。