python写入中文json

在做项目的过程中,有时候我们需要用json文件来直观的反应某种隐射关系。

json的数据结构类似于词典(dict)

这里总结下最近在写入json的过程中遇到的问题:

1.读写文件

json的主要方法有两种json.dumps和json.loads。详细说明可阅读这篇文章(https://www.cnblogs.com/bigberg/p/6430095.html)

这里我们定义一个名为data的词典(dict)

data = {'132070106': {'1005': '112', '1054': '147'}, '1132070101': {'1003': '106', '1006': '105'}}

(1)通过dumps命令可以将其转换成字符串

dat1 = json.dumps(data)
type(dat1)

#输出格式是str

这里我们查看一下转化后的dat1的格式,可见所有的key和value都被双引号注明(这里一定要区别于单引号)

'{"132070106": {"1005": "112", "1054": "147"}, "1132070101": {"1003": "106", "1006": "105"}}'

(2)写入文件res.json,其中indent = 4可以在结果中自动转换成json格式,结果如下图

with open('res.json', 'w') as f:
        json.dump(data, f,indent=4)

python写入中文json_第1张图片

(3)如果我们想把字符串格再转化为dict,需要用到json.loads

dat2 = json.loads(dat1)

输出结果和data一致

{'1132070101': {'1003': '106', '1006': '105'},
 '132070106': {'1005': '112', '1054': '147'}}

2.替换中文字段

在实际项目中为便于处理,我们一般会用某个中文字段的code或id来进行分析,然而最终向产品经理导出结果的时候却需要将code(或者id)转换成中文,便于阅读。

(1)替换中文

例如,这里我们把data转换成str后,并将key替换为中文

dat3 = str(data).replace('1132070101','南京').replace('132070106','徐州')

dat3

#输出结果为

"{'徐州': {'1005': '112', '1054': '147'}, '南京': {'1003': '106', '1006': '105'}}"

(2)处理报错

这时如果我再把dat3转换为dict会提示出错,报错提示:期待的字段名称应该包裹在双引号中,不是单引号

json.loads(dat3)


JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

这里我们可以联系上面1(1)中dat1的结果,因此为了可以在替换成中文字段后继续转换为词典,有必要将单引号替换为双引号。

dat4 = str(dat3).replace("'", '"')

dat4

#dat4的结果为
'{"徐州": {"1005": "112", "1054": "147"}, "南京": {"1003": "106", "1006": "105"}}'

再次尝试转换为词典

dat5 = json.loads(dat4)

dat5

#dat5的输出结果,格式dict

{'南京': {'1003': '106', '1006': '105'}, '徐州': {'1005': '112', '1054': '147'}}

(3)写入中文json文件

由于json中有中文,所以需要注明编码格式encoding及ensure_ascii

with open('result.json', 'w',encoding='utf-8') as f:
    json.dump(dat5, f,ensure_ascii=False,indent = 4)

最终结果如下

python写入中文json_第2张图片

写入成功

你可能感兴趣的:(Python)