编辑在后台直接粘贴结构化代码,引号被输入法转成了中文全角,「@type」两边变成了弯引号,页面看着正常,测试工具报 Unexpected token。

一开始怀疑是「字段里夹了换行符,字符串没有闭合」,查了一圈,方向不对。

排查方向其实有限,先把可能性排一排。全角引号不是合法 JSON 字符,解析在第一处就中断。另一种情况是复制粘贴时不可见字符一起带进了字符串。

少数情况下是注释写在了 JSON-LD 里,JSON 不支持注释。

动手时先把这段 JSON 单独取出来校验

curl -s https://www.example.com/a/1.html | grep -o 'ld\+json">.*</script>' | sed 's/.*">//;s/<\/script>//' | python -m json.tool

定位报错字符的位置

curl -s https://www.example.com/a/1.html | grep -nP '[\x{201C}\x{201D}\x{FF02}]'

接着统一替换成半角双引号

sed -i 's/[“”]/\"/g' schema.json

末了把代码块从编辑器里挪到独立文件

python -c "import json;json.load(open('schema.json'));print('ok')"

恢复的判定其实很直接。json.tool 能完整解析,测试工具不再报语法错误,富媒体状态恢复为有效。

提醒一点。中文输入法下的引号问题肉眼几乎看不出来,结构化数据出问题先用解析器跑一遍原文。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189