Python生存为json中文Unicode乱码解决json.dump()

打印 上一主题 下一主题

主题 675|帖子 675|积分 2025

生存为json中文Unicode乱码:

可以看到,中文字符没有乱码,只是出现了反斜杠,此时解决方法应考虑是否举行了二次序列化。
一、缘故原由1

在dump时参加ensure_ascii=False 即可解决,即json.dump(json_data, f, indent=4, ensure_ascii=False)
二、缘故原由2

json.dumps(data_dict, ensure_ascii=False)已经举行了序列化,在写入文件时,又采用json.dump(json_data, f, indent=4, ensure_ascii=False)方法导致二次序列化,改为f.write(json_data)即可。
  1. import os
  2. import json
  3. import numpy as np
  4. np.set_printoptions(linewidth=400)
  5. data_list = []
  6. result_list = []
  7. is_duplicate = []
  8. for filename in os.listdir("./log_data"):
  9.     print(filename)
  10.     with open("./log_data/" + filename, 'r', encoding="utf-8") as f:
  11.         line = f.readline()
  12.         while line:
  13.             data = line[line.find("【param】") + len("【param】") + 1:line.find("【result】") - 2]
  14.             result = line[line.find("【result】") + len("【result】") + 1:line.find(", 【headers】")]
  15.             data_list.append(data)
  16.             result_list.append(result)
  17.             line = f.readline()
  18. effective_set = set()
  19. print(len(data_list))
  20. for data in data_list:
  21.     try:
  22.         data_dict = json.loads(data)
  23.         trace_id = data_dict.pop("trace_id")
  24.         print(data_dict["match_start_date"])
  25.         effective_set.add(json.dumps(data_dict, ensure_ascii=False))
  26.     except:
  27.         pass
  28.         continue
  29. print(len(effective_set))
  30. n = 1
  31. for json_data in effective_set:
  32.     if n <= 87:
  33.         with open("./log_data2json/" + f'{hash(json_data)}' + ".json", 'w', encoding="utf-8") as f:
  34.             # json.dump(json_data, f, indent=4, ensure_ascii=False)
  35.             f.write(json_data) # 避免二次序列化
  36.         n += 1
  37. print(n)
复制代码
json.dump()与json.dumps()的区别

json.dumps():将Python字典转为字符串:
  1. import json
  2. # 定义 Python 对象
  3. data = {
  4.     "name": "John",
  5.     "age": 30,
  6.     "city": "New York"
  7. }
  8. # 将 Python 对象转换为 JSON 字符串
  9. json_str = json.dumps(data)
  10. # 打印 JSON 字符串
  11. print(json_str)
复制代码
json.dump将Python字典写入文件:
  1. import json
  2. # 定义 Python 对象
  3. data = {
  4.     "name": "John",
  5.     "age": 30,
  6.     "city": "New York"
  7. }
  8. # 打开文件并将 Python 对象写入文件
  9. with open('data.json', 'w') as f:
  10.     json.dump(data, f)
复制代码
json.load()与json.loads()的区别

json.load()读取文件,转化为字典:
  1. with open('s.json', 'r') as f:
  2.     s1 = json.load(f) # dict
复制代码
json.loads()将字符串转为字典:
  1. s = '{"name": "wade", "age": 54, "gender": "man"}'
  2. type(json.loads(s))) # dict
复制代码
总结

加s的(loads、dumps)操作的是字符串
不加s的(load、dump)操作的是文件,用于读写文件。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

老婆出轨

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表