当Python处理JSON数据时,如果涉及到中文,需要注意字符编码问题。以下是Python读写JSON涉及到中文的处理方法攻略:
1. 读取中文JSON数据
在读取JSON数据中出现中文时,需要设置正确的字符串编码。可以使用Python自带的json
模块,其loads()
函数可以将JSON字符串转换为Python字典,并指定UTF-8编码格式,如下所示:
import json
json_str = '{"name": "张三", "age": 18}' # 这是一个包含中文的JSON串
dict_data = json.loads(json_str, encoding='utf-8') # 指定UTF-8编码格式
print(dict_data)
运行上述代码,输出结果如下:
{'name': '张三', 'age': 18}
2. 写入中文JSON数据
在写入JSON数据中出现中文时,同样需要设置正确的字符串编码。可以使用Python自带的json
模块,其dump()
函数可以将Python字典转换为JSON字符串,并指定UTF-8编码格式,如下所示:
import json
dict_data = {'name': '张三', 'age': 18} # 这是一个包含中文的Python字典
json_str = json.dumps(dict_data, ensure_ascii=False) # 指定UTF-8编码格式
with open('data.json', 'w', encoding='utf-8') as f:
f.write(json_str)
上述代码将字典dict_data
转换为JSON字符串,并存在文件data.json
中,文件中的内容为:
{"name": "张三", "age": 18}
其中,ensure_ascii=False
表示输出中文字符时不使用ASCII编码,而是采用原始字符编码,避免将中文转换为Unicode码。
示例
假设有一个包含学生成绩信息的JSON文件score.json
,格式如下:
{
"张三": {"语文": 90, "英语": 85, "数学": 95},
"李四": {"语文": 92, "英语": 88, "数学": 96},
"王五": {"语文": 88, "英语": 90, "数学": 94}
}
现在需要读取该文件,并输出每个学生的语文成绩和总成绩:
import json
with open('score.json', 'r', encoding='utf-8') as f:
score_dict = json.load(f)
for name, scores in score_dict.items():
chinese_score = scores['语文']
total_score = sum(scores.values())
print('{name}的语文成绩为{chinese_score},总成绩为{total_score}'.format(name=name, chinese_score=chinese_score, total_score=total_score))
运行上述代码,输出结果如下:
张三的语文成绩为90,总成绩为270
李四的语文成绩为92,总成绩为276
王五的语文成绩为88,总成绩为272
再假设需要将新的学生成绩写入原有JSON文件,并输出所有学生的最高成绩:
import json
with open('score.json', 'r', encoding='utf-8') as f:
score_dict = json.load(f)
new_score_dict = {
"赵六": {"语文": 85, "英语": 82, "数学": 87},
"钱七": {"语文": 91, "英语": 92, "数学": 89}
}
score_dict.update(new_score_dict)
with open('score.json', 'w', encoding='utf-8') as f:
json.dump(score_dict, f, ensure_ascii=False)
max_score = max([max(scores.values()) for scores in score_dict.values()])
print('所有学生的最高成绩为{}'.format(max_score))
运行上述代码后,输出结果如下:
所有学生的最高成绩为96
本攻略介绍了Python读写JSON涉及到中文的处理方法,并给出了两个示例。在具体应用时,还需要根据实际情况调整代码。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python读写Json涉及到中文的处理方法 - Python技术站