讲师中心 微信公众号

工具推荐

视频效率加速
updream

一键生成高质量推广成片

Laper
Laper

剧本策划到成片协作

AniShort
AniShort

AI短剧协同制作平台

立刻MV
立刻MV

低成本歌曲 MV、视频生成

如何正确解析被 HTML 实体编码的嵌套 JSON 字段

梦芳大大_6566

梦芳大大_6566

发布时间:2026-01-27 19:45:01

|

742人浏览过

|

来源于php中文网

原创

如何正确解析被 HTML 实体编码的嵌套 JSON 字段

当 api 返回的 json 中某些字段(如 `child_sku_options`)实际是经过 html 实体编码的 json 字符串时,直接 `json.loads()` 会失败;需先用 `html.unescape()` 还原转义字符,再二次解析。

在调用某些搜索服务(如 SearchSpring)的 API 时,常见一种“伪嵌套 JSON”现象:主响应是合法 JSON,但其中某个字符串字段(例如 "child_sku_options")的值并非原始 JSON 对象,而是被双重编码的 JSON 字符串——它被 HTML 实体转义(如 / 代替 /、" 替代 "),导致直接解析报错或输出乱码。

你的原始代码:

print(json.loads(response.content))

看似合理,但问题出在 response.content 解析后得到的 data["results"][i]["child_sku_options"] 是一个字符串形式的、被 HTML 转义的 JSON,例如:

"{"option_value_id":197674,"value":"12 Degree",..."image_url":"https:\/\/cdn11.bigcommerce.com\/...jpg"}"

该字符串中的 / 和 " 是 HTML/XML 编码结果,并非标准 JSON 允许的原始反斜杠,因此无法被 json.loads() 直接识别。

立即学习“前端免费学习笔记(深入)”;

DeepBI DHTML 页面生成器
DeepBI DHTML 页面生成器

生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur

下载

✅ 正确处理流程如下:

  1. 先解析顶层 JSON:使用 response.json() 或 json.loads(response.content) 获取主数据结构;
  2. 定位被编码的字段:如 r["child_sku_options"](类型为 str);
  3. HTML 解码:调用 html.unescape() 消除 "、/、/ 等转义,还原为标准 JSON 字符串;
  4. 二次 JSON 解析:对解码后的字符串执行 json.loads(),得到真正的 Python 字典/列表。

以下是完整、健壮的示例代码(含错误处理和推荐实践):

import json
import requests
from html import unescape

url = "https://547os1.a.searchspring.io/api/search/search.json?ajaxCatalog=v3&resultsFormat=native&siteId=547os1&domain=https%3A%2F%2Fwww.golfbox.com.au%2Fsearch%3Fq%3DCalaway%2BParadym%2BDriver%26Search%3DSEARCH&q=Calaway%20Paradym%20Driver"

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36"
}

try:
    response = requests.get(url, headers=headers, timeout=10, verify=False)
    response.raise_for_status()  # 检查 HTTP 错误状态码

    # 解析顶层 JSON
    data = response.json()

    # 遍历搜索结果,提取并解析 child_sku_options
    for i, result in enumerate(data.get("results", [])):
        options_str = result.get("child_sku_options")
        if not isinstance(options_str, str) or not options_str.strip():
            print(f"[跳过] 第 {i+1} 条结果无 child_sku_options 字段")
            continue

        try:
            # 步骤1:HTML 解码 → 还原为标准 JSON 字符串
            decoded_str = unescape(options_str)
            # 步骤2:JSON 解析 → 转为 Python 对象
            options_list = json.loads(decoded_str)
            print(f"✅ 第 {i+1} 条结果解析成功,共 {len(options_list)} 个 SKU 选项:")
            # 示例:打印首个选项的 child_sku 和 price
            if options_list:
                first = options_list[0]
                print(f"   - SKU: {first.get('child_sku', 'N/A')}, Price: ${first.get('price', 'N/A')}")
        except json.JSONDecodeError as e:
            print(f"❌ 解析第 {i+1} 条的 child_sku_options 失败:{e}")
            print(f"   原始字符串(截取前100字符):{options_str[:100]}...")
        except Exception as e:
            print(f"⚠️  其他异常:{e}")

except requests.exceptions.RequestException as e:
    print(f"网络请求失败:{e}")
except json.JSONDecodeError as e:
    print(f"顶层 JSON 解析失败:{e}")

? 关键注意事项:

  • ❌ 不要禁用 SSL 验证(verify=False)用于生产环境——它会带来安全风险。如遇证书问题,请更新 CA 证书或使用 requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS 调整 TLS 设置,而非关闭验证。
  • ✅ 优先使用 response.json() 而非 json.loads(response.content),前者自动处理编码(如 UTF-8 BOM、Content-Type charset),更可靠。
  • ✅ 始终校验字段是否存在(dict.get())、类型是否正确(isinstance(..., str)),避免 KeyError 或 TypeError。
  • ? 若发现 unescape() 后仍解析失败,可用 print(repr(decoded_str)) 查看真实字符串内容,确认是否含不可见控制字符(如 u2028 行分隔符),必要时用正则清洗。

通过这一“HTML 解码 + 二次 JSON 解析”的组合策略,你就能稳定提取 SearchSpring 等平台返回的嵌套结构化商品选项数据,彻底告别 / 和 " 带来的解析困扰。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2295

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

3762

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

1256

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

4379

2025.09.10

python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

3400

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

269

2026.02.03

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

5084

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

6597

2024.08.01

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

60

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn