为什么 JSON.parse 在有效的 JSON 上失败(隐藏的 Unicode 字符)

发布: (2026年3月4日 GMT+8 14:11)
3 分钟阅读
原文: Dev.to

Source: Dev.to

问题:JSON.parse 抛出 “Unexpected token”

有时即使 JSON 看起来完全合法,JSON.parse 仍会抛出 “Unexpected token” 错误。当 JSON 来自 Slack、Word、Notion 或 ChatGPT 等来源时,这种情况尤其令人困惑。

const json = '{ "name": "John" }';

字符串表面上是正确的,但可能隐藏了 Unicode 字符。

常见的隐形字符

  • 零宽空格U+200B
  • 字节顺序标记 (BOM)U+FEFF
  • 不间断空格U+00A0

这些字符在大多数编辑器中不可见,却会导致严格的解析器出错。

带有隐藏字符的示例

{ "name": "John" }

引号前的那个极小的不可见字符可能导致类似以下的错误:

Unexpected token in JSON at position X

检测并移除隐藏字符

可以使用正则表达式剥离常见的隐藏字符:

const clean = str.replace(/[\u200B-\u200D\uFEFF]/g, "");

在剥离之前,记录字符代码以确认它们的存在会很有帮助。

用于检测的浏览器工具

在调试此问题时,我制作了一个小型浏览器工具,用来检测并移除不可见的 Unicode 字符。它会高亮显示:

  • 零宽空格
  • BOM
  • 不间断空格
  • 其他隐藏的 Unicode 字符

你可以在此尝试:
该工具 100 % 在客户端运行,文本永远不会离开你的浏览器。

JSON.parse 失败时的处理办法

  1. 检查隐藏的 Unicode 字符 – 检查字符串中是否存在不可见的码点。
  2. 记录字符代码 – 遍历字符串并输出 charCodeAt 的值。
  3. 剥离零宽字符 – 使用上面的正则表达式或类似方法。

不可见字符是导致解析错误的一个出乎意料的常见原因。移除它们即可恢复 JSON.parse 的正常行为。

0 浏览
Back to Blog

相关文章

阅读更多 »

摆脱异步烦恼的响应式数据

!Robert Sanders https://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads...