可以在没有左括号的情况下存在JSON对象

时间:2015-07-28 03:54:03

标签: json

一个简单的问题,我需要澄清一下。

查看RFC,JSON对象是

object-begin string : value object-end

类似

{ "foo" : "bar" }

是一个有效的JSON对象。问题是,没有开始和结束标记,对象是否可以存在?这样

"foo" : "bar"

"foo" : {
    "bar" : "baz"
}

查看一些JSON格式化程序和验证程序,前者是有效的,而后者则不是。如果后者无效,是否有根对象的技术名称?如果第二个示例中foo.barbaz,是否存在技术.foo

1 个答案:

答案 0 :(得分:2)

RFC为JSON对象提供以下语法:

object = begin-object [ member *( value-separator member ) ]
         end-object

member = string name-separator value

begin-object是一个左大括号({),左侧有可选的空格,end-object是右大括号(}),同样带有可选的空格

所以,不,不,这个:

"foo" : "bar"

......也不是这样:

"foo" : {
    "bar" : "baz"
}

...是一个有效的JSON对象。

在RFC中,根对象(也可以是字符串,数组,数字,truefalsenull)简称为“JSON文本”。

  

如果第二个示例中foo.barbaz,是否存在技术.foo

不,因为foo.bar不是JSON,它是JavaScript。 JSON规范(非常故意)没有给出任何给定实现在反序列化后应如何表示数据的意见。为了说明,这是RFC的一个例子:

  

这是一个JSON对象:

{
  "Image": {
      "Width":  800,
      "Height": 600,
      "Title":  "View from 15th Floor",
      "Thumbnail": {
          "Url":    "http://www.example.com/image/481989943",
          "Height": 125,
          "Width":  100
      },
      "Animated" : false,
      "IDs": [116, 943, 234, 38793]
  }
}
     

Image成员是一个对象,其Thumbnail成员是一个对象,其IDs成员是一个数字数组。

通过类比,您的示例的foo成员是一个对象,其bar成员是一个字符串 - 并且与RFC一样接近为根对象提供名称。