未捕获的SyntaxError:具有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
products
是一个对象。 (从对象文字创建)
JSON.parse()
用于将包含JSON表示法的字符串转换为Javascript对象。
您的代码将对象转换为字符串(通过调用.toString()
)以尝试将其解析为JSON文本。
默认的.toString()
返回"[object Object]"
,它不是有效的JSON; 因此错误。
假设你知道它是有效的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 chars
s = s.replace(/[u0000-u0019]+/g,"");
var o = JSON.parse(s);
看来你想把对象串联起来 。
所以,你应该使用:
JSON.stringify(products);
错误的原因是JSON.parse()
需要一个String
值,而products
是一个Array
。
注意:我认为它尝试json.parse('[object Array]')
,它抱怨它在[
后面没有期望令牌o
。