错误“未捕获的语法错误:带有 JSON.parse 的意外令牌”

新手上路,请多包涵

是什么导致第三行出现此错误?

var products = [{
  "name": "Pizza",
  "price": "10",
  "quantity": "7"
}, {
  "name": "Cerveja",
  "price": "12",
  "quantity": "5"
}, {
  "name": "Hamburguer",
  "price": "10",
  "quantity": "2"
}, {
  "name": "Fraldas",
  "price": "6",
  "quantity": "2"
}];
console.log(products);
var b = JSON.parse(products); //unexpected token o

打开控制台查看错误

原文由 coiso 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

products 是一个对象。 (从对象字面量创建)

JSON.parse() 用于将包含 JSON 表示法的 字符串 转换为 Javascript 对象。

您的代码将对象转换为字符串(通过调用 .toString() ),以便尝试将其解析为 JSON 文本。

默认的 .toString() 返回 "[object Object]" ,这是无效的 JSON;因此错误。

原文由 SLaks 发布,翻译遵循 CC BY-SA 3.0 许可协议

假设你知道它是有效的 JSON,但你仍然得到这个……

在这种情况下,字符串中很可能存在来自您获取它们的任何来源的隐藏/特殊字符。当您粘贴到验证器中时,它们会丢失 - 但在字符串中它们仍然存在。这些字符虽然不可见,但会中断 JSON.parse()

如果 s 是您的原始 JSON,则使用以下命令清理它:

 // Preserve newlines, etc. - use valid JSON
s = s.replace(/\\n/g, "\\n")
               .replace(/\\'/g, "\\'")
               .replace(/\\"/g, '\\"')
               .replace(/\\&/g, "\\&")
               .replace(/\\r/g, "\\r")
               .replace(/\\t/g, "\\t")
               .replace(/\\b/g, "\\b")
               .replace(/\\f/g, "\\f");
// Remove non-printable and other non-valid JSON characters
s = s.replace(/[\u0000-\u0019]+/g,"");
var o = JSON.parse(s);

原文由 EdH 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题