var data={
"apple_scab": {
"sym": "Dark velvet covering on leaves, Velvety olive-green to black spots on leaves",
"cause": "Venturia inaequalis",
"nc_c": "Use resistant varieties: Prima, Priscilla, Sir Prize, Jonafree, Red free, Dayton, Pristine, Goldrush, Enterprise or Liberty.",
"c_c": "Use fungicide such as Captan."
}}
大多数在线解析器都成功解析了上述JSON
此外,我可以将其直接放在浏览器的js控制台中,并且可以从控制台中读取内容。
如果我在使用json.parse()时给变量赋值,并且变量给出错误:
var obj = JSON.parse(data);
*VM568:1 Uncaught SyntaxError: Unexpected token o in JSON at position 1
at JSON.parse (<anonymous>)
at <anonymous>:1:6*
答案 0 :(得分:2)
JSON.parse
接受一个已解析的字符串,然后返回一个充满已解析数据的对象。但是,您正在向它传递一个对象。 data
已被解析,因此您根本不需要JSON.parse
。
由于出现一些奇怪的JavaScript怪异,您遇到此错误Unexpected token o in JSON at position 1
。基本上,它试图将对象强制转换为字符串,以便可以对其进行解析。对象被简单地[object Object]
强制转换为字符串。因此,您实际上正在运行
JSON.parse('[object Object]')
这是无效的json,并且错误告诉您无效的字符串的第一个字符。
但是在您的情况下,您可以直接使用data
而不进行解析。
var data={
"apple_scab": {
"sym": "Dark velvet covering on leaves, Velvety olive-green to black spots on leaves",
"cause": "Venturia inaequalis",
"nc_c": "Use resistant varieties: Prima, Priscilla, Sir Prize, Jonafree, Red free, Dayton, Pristine, Goldrush, Enterprise or Liberty.",
"c_c": "Use fungicide such as Captan."
}
}
console.log(data.apple_scab.cause) //-> Venturia inaequalis
答案 1 :(得分:0)
因此,根据我的收集,您正在尝试解析一个已经是对象的对象。
let someObject = { hello: "world" };
JSON.parse(someObject);
这将失败,因为JSON.parse()
无法解析对象。
要使操作成功,它必须是一个字符串。
let someJsonString = '{ "hello": "world" }';
let myObject = JSON.parse(someJsonString);
console.log(myObject);
这将成功并解析对象。