一个简单的问题,我需要澄清一下。
查看RFC,JSON对象是
object-begin string : value object-end
类似
{ "foo" : "bar" }
是一个有效的JSON对象。问题是,没有开始和结束标记,对象是否可以存在?这样
"foo" : "bar"
或
"foo" : {
"bar" : "baz"
}
查看一些JSON格式化程序和验证程序,前者是有效的,而后者则不是。如果后者无效,是否有根对象的技术名称?如果第二个示例中foo.bar
为baz
,是否存在技术.foo
?
答案 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中,根对象(也可以是字符串,数组,数字,true
,false
或null
)简称为“JSON文本”。
如果第二个示例中
foo.bar
为baz
,是否存在技术.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一样接近为根对象提供名称。