【问题标题】:Why does JSON.parse("foo") fail but JSON.parse(' "foo" ') success?为什么 JSON.parse("foo") 失败但 JSON.parse(' "foo" ') 成功?
【发布时间】:2019-11-05 02:53:34
【问题描述】:

当我尝试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)

那么为什么会这样呢?

【问题讨论】:

    标签: javascript json parsing


    【解决方案1】:

    您可以在json.org 找到有效 JSON 的原因。 JSON 可以表示 null、布尔值、数字、字符串、数组和对象。对于字符串,它们必须用双引号括起来。

    JSON本身是一个字符串格式,所以当你指定一个JSON格式的字符串时,你需要:

    1. 用引号告诉 JavaScript 你正在指定一个字符串字面量。这些引号不是字符串值本身的一部分;它们只是分隔符。
    2. 在该字符串文字中使用双引号,以遵循字符串数据类型的 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)

    【讨论】:

      【解决方案2】:

      发生这种情况是因为JSON.parse() 通过格式化使用syntaxis 给出的字符串以在Javascript 中声明值来返回一个值。因此,使用foo裸就如同强制转换一个未定义的变量。

      还要注意,符号使用双引号 " 而不是单引号 '。这就是为什么JSON.parse('"foo"') 有效,而JSON.parse("'foo'") 无效。

      【讨论】:

        猜你喜欢
        • 2020-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-10
        • 1970-01-01
        • 1970-01-01
        • 2010-12-12
        • 1970-01-01
        相关资源
        最近更新 更多