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

2022-08-30 00:44:30

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

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

打开控制台查看错误


答案 1

products是一个对象。(从对象文本创建)

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

您的代码将对象转换为字符串(通过调用),以便尝试将其解析为 JSON 文本。
默认返回 ,这是无效的 JSON;因此,错误。.toString().toString()"[object Object]"


答案 2

假设您知道它是有效的JSON,但您仍在获得此内容...

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

如果 是原始 JSON,请使用以下命令进行清理:s

// 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);