技术与生活 / 一篇记录
JSON 里的中文被转义,不一定是乱码
JSON 是数据交换格式,输出可读性与字符串内部值是两回事。
Unicode 转义是一种合法表示,同样的数据可以显示为汉字,也可以显示为转义序列。判断数据是否损坏,应比较反序列化后的字符串,而不只比较输出外观。
从一个例子看起
以下示例使用 Python 3,文件路径和输入值均为练习样本。
import json
print(json.dumps({'name': '笔记'}, ensure_ascii=False))
反序列化后比较对象,确认中文值未改变。
排查时再往前走一步
将对象序列化再读回,检查键值与原对象一致。还要注意日期对象、集合等类型并不能直接按默认方式编码,需要先约定交换格式。
跨系统交换时,还要统一数值和空值的含义。大整数可能超过某些客户端的精确表示范围,金额和标识符应根据协议选择数值或字符串,不能只凭 Python 端能保存就决定格式。
不要把不可信 JSON 当成 Python 代码交给 eval。
参考:Python 文档。