为什么JSON.parse(“ foo”)失败但JSON.parse('“ foo”')成功?

时间:2019-11-05 02:53:34

标签: javascript json parsing

当我尝试JSON.parse("foo")时,出现错误:

Uncaught SyntaxError: Unexpected token o in JSON at position 1
    at JSON.parse (<anonymous>)
    at <anonymous>:1:6

但是,当我使用JSON.parse('"foo"')时,我可以得到预期的结果:

const value = JSON.parse('"foo"');
console.log(value)

那为什么会发生这种情况?

2 个答案:

答案 0 :(得分:1)

您可以在json.org中找到使有效JSON有效的原因。 JSON可以代表null,布尔值,数字,字符串,数组和对象。对于字符串,必须将其用双引号引起来。

JSON本身是字符串格式,因此当您以JSON格式指定字符串时,您需要:

  1. 引号告诉JavaScript您正在指定字符串文字。这些引号不属于字符串值本身;它们只是定界符。
  2. 该字符串文字中的
  3. 用双引号引起来,以遵循字符串数据类型的JSON语法。

下面是JSON.parse正确参数的一些示例:

  • JSON.parse("true")
  • JSON.parse("false")
  • JSON.parse("null")
  • JSON.parse("42")
  • JSON.parse("[13]")
  • JSON.parse('"hello"')
  • JSON.parse('{"name": "Mary"}')

但不是:

  • JSON.parse("yes")
  • JSON.parse("no")
  • JSON.parse("none")
  • JSON.parse('hello')
  • JSON.parse({"name": "Mary"})

由于该参数在不存在时将被强制转换为字符串,因此以下内容也可以工作,但会造成混乱(且无用):

  • JSON.parse(true)
  • JSON.parse(false)
  • JSON.parse(null)
  • JSON.parse(42)

答案 1 :(得分:0)

之所以会这样,是因为JSON.parse()通过格式化使用syntaxis给出的字符串来返回值,从而用Java语言声明值。因此,赤裸使用foo就像是投射未定义的变量。

还请注意,该符号使用双引号"而不是单引号'。这就是JSON.parse('"foo"')有效但JSON.parse("'foo'")无效的原因。