1、原始json数据
[
{
"text": "黎城县东崖底中心校学生用床购置项目成交公告",
"label": "1"
"duoyu": "0"
},
{
"text": "淮南师范学院采购2017年智库项目、科研建设项目、学科及科技创新平台项目(1包)中标公示",
"label": "1"
"duoyu": "0"
}
]
2、经过初步处理,对上述数据进行操作,需要去除"duoyu": "0"项,此时读取之后对值进行更改要存入另一个新的json文件中,但是读取完之后,直接使用write()写入会报错如下
TypeError: write() argument must be str, not list
3、常见错误是直接强制进行转换,如果不考虑后续,可以直接转换,如下:
# use_data/data17.json为文件路径
with open('use_data/data17.json', 'w', encoding='utf-8') as f:
f.write(str(count_list))
但是会存在问题:
问题一:会造成写入的时候双引号变单引号,在新文件内需要手动调整,如果原始数据中文本存在引号可能更加麻烦
问题二:如果是多文件,需要更改文件路径,读取时无法直接进行赋值更改
4、故使用其他方法进行写入,在写入前,进行json.dumps转换,如下
count_list = json.dumps(count_list)
但是同样会出现问题,写入的数据,虽然没有了问题二的报错信息,但是数据内是字符类型,如下:
[
{
"text": "\u9ece\u57ce\u53bf\u4e1c\u5d16\u5e95\u4e2d\u5fc3\u6821\u5b66\u751f\u7528\u5e8a\u8d2d\u7f6e\u9879\u76ee\u6210\u4ea4\u516c\u544a",
"label": "\u4e2d\u6807\u516c\u544a"
},
{
"text": "\u6dee\u5357\u5e08\u8303\u5b66\u9662\u91c7\u8d2d2017\u5e74\u667a\u5e93\u9879\u76ee\u3001\u79d1\u7814\u5efa\u8bbe\u9879\u76ee\u3001\u5b66\u79d1\u53ca\u79d1\u6280\u521b\u65b0\u5e73\u53f0\u9879\u76ee(1\u5305)\u4e2d\u6807\u516c\u793a",
"label": "\u4e2d\u6807\u516c\u544a"
}
]
5、为了解决这个问题,需要在问题4中的代码后添加如下:
json_data = json.dumps(json_data, ensure_ascii=False)
即添加ensure_ascii=False部分
6、总结,在json格式写入时,防止报错str以及字符显示,在写入前添加代码:
json_data = json.dumps(json_data, ensure_ascii=False)