返回

秒懂“Could not read document: Unrecognized token ‘xxx‘: was expecting (‘true‘, ‘false‘ or ‘null‘)”错误解决方法

前端

解析 JSON 时遭遇“未知令牌”的窘境

想象一下这样的场景:你满怀信心,准备将一个 JSON 字符串转换为 JavaScript 对象,却突然遭遇了一条让人挠头的错误消息:“Could not read document: Unrecognized token 'xxx': was expecting ('true', 'false' or 'null')”。别担心,这绝非你编程生涯的终点,而是一个你即将掌握的新挑战。

错误的根源:揭开神秘面纱

当你试图解析 JSON 字符串时,解析器会对其中的字符进行逐一检查,确保它们符合 JSON 语法。如果解析器发现一个它无法识别的字符,它就会发出“未知令牌”错误。这个字符可能是:

  • 非法字符: 特殊字符或转义字符,它们不属于 JSON 语法的组成部分。
  • 遗失引号: 字符串值两端的引号缺失或不匹配。
  • 格式错误: 花括号或方括号摆放不当,导致 JSON 结构不完整。
  • 无效值: JSON 字符串中存在 JavaScript 中不支持的值,例如 NaN、Infinity 或 undefined。

征服错误的策略:逐个击破

为了解决“未知令牌”错误,不妨按部就班地进行以下步骤:

  1. 仔细检查 JSON 字符串: 逐字逐句检查,找出是否有非法字符、遗失引号或格式错误。
  2. 验证值是否有效: 确保 JSON 字符串中包含的值都是 JavaScript 所认可的类型。
  3. 使用严格的 JSON 解析器: 在 JavaScript 中,可以使用 JSON.parse() 方法解析 JSON 字符串,它会自动检测并处理无效令牌。

防患于未然:避免错误的秘诀

为了避免再次遭遇“未知令牌”错误,谨记以下技巧:

  • 使用 JSON.parse() 方法验证 JSON 字符串的格式,确保其符合语法要求。
  • 确保所有值都是有效的 JSON 类型。
  • 使用严格的 JSON 解析器,帮助你及时发现并处理无效数据。

示例代码:揭示解析之谜

以下 JavaScript 代码演示了如何使用 JSON.parse() 方法解析 JSON 字符串:

const jsonString = `{
  "name": "John Doe",
  "age": 30,
  "isMarried": true
}`;

try {
  const jsonObject = JSON.parse(jsonString);
  console.log(jsonObject); // 输出:{ name: 'John Doe', age: 30, isMarried: true }
} catch (error) {
  console.log(error); // 输出:Unrecognized token '}'
}

在示例中,JSON 字符串是有效的,因此解析成功。如果 JSON 字符串包含错误(例如缺少引号),则会抛出“未知令牌”错误。

常见问题解答:疑难杂症一扫而光

  1. 如何处理包含非法字符的 JSON 字符串?

    使用转义字符将非法字符转换为 JSON 解析器可以识别的格式。例如,将双引号转义为 \”。

  2. 为什么 JSON 字符串中不能包含 NaN?

    NaN(非数字)不是一个有效的 JSON 值。使用 null 代替 NaN。

  3. 如何检测“未知令牌”错误?

    使用 JavaScript 的 try-catch 块捕获 JSON.parse() 方法抛出的错误。

  4. 是否存在处理“未知令牌”错误的库或工具?

    是的,例如 JSONLint 和 JSONSchema,它们可以帮助你验证 JSON 字符串的格式和语法。

  5. “未知令牌”错误是否总是由无效的 JSON 语法引起的?

    不一定,它有时也可能由解析器实现中的错误或数据编码问题引起。

结语:拥抱未知,化解危机

“Could not read document: Unrecognized token 'xxx': was expecting ('true', 'false' or 'null')”错误只是你 JSON 解析旅程中的一次小插曲。通过理解错误的原因、解决方法和预防技巧,你将成为一名 JSON 解析高手,轻而易举地处理任何挑战。