← 全部文章

技术与生活 / 一篇记录

JSON 里的中文被转义,不一定是乱码

JSON 是数据交换格式,输出可读性与字符串内部值是两回事。

Unicode 转义是一种合法表示,同样的数据可以显示为汉字,也可以显示为转义序列。判断数据是否损坏,应比较反序列化后的字符串,而不只比较输出外观。

从一个例子看起

以下示例使用 Python 3,文件路径和输入值均为练习样本。

import json
print(json.dumps({'name': '笔记'}, ensure_ascii=False))

反序列化后比较对象,确认中文值未改变。

排查时再往前走一步

将对象序列化再读回,检查键值与原对象一致。还要注意日期对象、集合等类型并不能直接按默认方式编码,需要先约定交换格式。

跨系统交换时,还要统一数值和空值的含义。大整数可能超过某些客户端的精确表示范围,金额和标识符应根据协议选择数值或字符串,不能只凭 Python 端能保存就决定格式。

不要把不可信 JSON 当成 Python 代码交给 eval。

参考:Python 文档。

搜索文章

输入关键词,找回一篇记录。