甚至json是正确的json解析在Java脚本中也不起作用?

时间:2018-10-18 19:28:38

标签: javascript json

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*

2 个答案:

答案 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);

这将成功并解析对象。