最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何在加载 JSON 数据时正确处理 HTML 实体和 Unicode 编码
时间:2026-06-15 09:30:30 编辑:袖梨 来源:一聚教程网
本文介绍在 Python 中解析 Yelp 等来源的 JSON 数据时,如何同时解决 HTML 实体(如 ')和乱码 Unicode 问题,推荐使用 response.json() 自动解码 + html.unescape() 清洗字段的组合方案。
本文介绍在 python 中解析 yelp 等来源的 json 数据时,如何同时解决 html 实体(如 `'`)和乱码 unicode 问题,推荐使用 `response.json()` 自动解码 + `html.unescape()` 清洗字段的组合方案。
在调用外部 API(例如 Yelp 商户评论接口)获取 JSON 响应时,常遇到两类编码干扰:一是原始数据中混入了 HTML 实体编码(如 ' 表示单引号 '," 表示双引号 "),二是响应未正确声明字符集,导致 response.text 解析为错误的字符串(如 u'u00e9' 显示为 é 的乱码形式)。若直接使用 json.loads(response.text, strict=False),虽能绕过部分 JSON 语法限制,但无法自动还原 HTML 实体,也无法保障 Unicode 解码准确性。
推荐做法是分两步处理:
-
优先使用 response.json() 替代 json.loads(response.text)
requests.Response.json() 方法会自动根据响应头(如 Content-Type: application/json; charset=utf-8)或 BOM 推断编码,并执行 UTF-8 解码,显著降低 Unicode 解析错误风险。 -
对含 HTML 实体的字符串字段调用 html.unescape()
该函数可安全地将 ' → '、" → "、& → & 等全部标准化,且兼容十进制/十六进制数值字符引用(如 ' 或 ')。
✅ 示例代码:
import htmlimport requestsdef parse_yelp_restaurant_api(self, response): # 步骤1:使用 response.json() 自动解码并解析 JSON jsonresponse = response.json() # ✅ 比 json.loads(response.text) 更可靠 # 步骤2:遍历需清洗的文本字段(如 review.text、business.name) for review in jsonresponse.get("reviews", []): if "text" in review: review["text"] = html.unescape(review["text"]) # ✅ 安全还原 HTML 实体 if "excerpt" in review: review["excerpt"] = html.unescape(review["excerpt"]) return jsonresponse
⚠️ 注意事项:
立即学习“前端免费学习笔记(深入)”;
- html.unescape() 是标准库函数(Python 3.2+),无需额外安装;
- 仅对字符串类型字段调用,避免对数字、布尔值或 None 报错(建议加 isinstance(val, str) 判断);
- 若 JSON 结构嵌套较深,可封装递归清洗函数,但需警惕性能开销;
- 不要对整个 JSON 字符串调用 html.unescape() —— 这会破坏 JSON 语法(如把 {"name":"A&B"} 变成 {"name":"A&B"} 是安全的,但误处理引号或括号则会导致解析失败)。
综上,response.json() + html.unescape() 是兼顾健壮性与简洁性的最佳实践,既规避了手动编码推断的陷阱,又精准清理了 HTML 转义污染,适用于 Yelp、Google Places 等常见含 HTML 实体的 API 数据源。
相关文章
- 崩坏星穹铁道垃美西斯二世成就攻略 06-18
- Cursor模型选择要点:任务类型与上下文限制说明 06-18
- Cursor国内使用限制:网络、账号与功能可用性说明 06-18
- Cursor官网访问入口:域名、镜像站与网络环境说明 06-18
- 崩坏星穹铁道星旅寻影第二天拍照攻略 06-18
- Cursor免费替代方案:功能差异与使用限制说明 06-18