json属性名必须加引号的讨论

来源:互联网 发布:尔雅网络课程登录 编辑:程序博客网 时间:2024/06/05 23:39

答案是必须要加。

首先看两个js对象的定义:

var jsObject={        name:"Nicholas",        age:29}var jsonObject={        "name":"Nicholas",        "age":29}
上面的两个JS对象分别是什么?在JS代码中第一个毫无疑问是JS对象,第二个所属就很模糊了,可以说是JS对象,也可以是JSON对象(JSON中没有对象的说法,为什么要称为JSON对象,jsonObject是JS中的JSON(格式的)对象,这么说没错,但有时会造成混乱)。第二个对象比较特殊,因为它即符合JS对象字面量的形式也符合JSON的表述方式,而它到底是什么要看你把它当作什么来用。

用eval()时,传入其中的代码会使用js解析器来解释,所以传入的是js对象,而调用JSON的方法时,如:parse(),参数的格式是必须要符合JSON语法要求的。

任何不符合要求的格式都会报错,因而,属性名加引号对JSON对象来说是必须的,而不是可有可无,属性名中引号可有可无的是JS对象字面量。

明白了上面之后就好说了,JSON规定的只是一种格式,其官网只用了一页的文字就把其讲解完了,ECMA-404文档也是简单的十几页,去掉前面的各种声明和后面的空白中间也就四页,因为其没有什么好讲的,没有复杂的语法,没有各种对象、类型的定义。只有对数据格式的规定,就是用花括号括起来的键值对,每一组键值对之间用逗号分隔,属性名用引号引起来……

JSON是数据形式,不像JavaScript、Java、C一样是一种专门的语言,JSON只是一种格式,而且是被大多数语言所接受的数据格式。其通用性决定了其格式的严格性,若其没有如此严格,那么跨语言开发的开发人员可能就要困扰了,因为从JS传递到后台交由Java处理的JSON对象很可能不符合Java中JSON对象的要求,然后由Java编程的系统与C编写的应用之间通信时还需要再一次转换格式……而且,各语言中都有其各自的保留关键字,若属性名不加双引号,那么把所有支持JSON的语言中的关键字都去掉,编程的时候好像又要费好大的脑力为属性起名字了。

严格的说,JavaScript中只有一个JSON对象——全局JSON对象,其除了所有对象共有的方法外只有stringify()parse()两个方法。除此之外,js代码中的任何对象都不可能是JSON对象,即便是使用stringify()方法序列化得到的对象也不是,因为JSON只是一种格式,没有对象一说,平时说的JSON对象,是JSON格式的js对象或是符合JSON数据结构要求的js对象。

最后:

某论坛中


强调一下,config中的参数不是JSON对象而是JS中的一个匿名对象,其有一个属性paths,属性值为一个匿名对象!

0 0