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,属性值为一个匿名对象!
- json属性名必须加引号的讨论
- JS声明对象时属性名加引号与不加引号的区别
- js对象中属性名加引号和不加引号的区别
- JS声明对象时属性名加引号与不加引号的区别
- JavaScript 1.3 对象补充:JS声明对象时属性名加引号与不加引号的区别(转)
- js 对象属性名不加引号与加引号的区别
- 对象属性加引号与不加引号de区别
- 如何去掉powerdesign生成的脚本加在表名和列名两端的引号
- php中Json字符串key加引号
- HTML属性的引号
- 获取json数据的属性名
- jQuery源码分析——关键字或保留字作为对象属性时必须加引号,调用该属性时也只能使用[]调用,不可用.来调用
- 记录,javascript中对象的属性名是字符串,却可以不用引号
- 关于sql加反引号与不加反引号的理解
- JSON对象属性名与属性值的提取
- hibernate:映射文件的属性名必须和pojo类的属性名以及数据库字段名一一对应
- C语言里面对数组名加1操作的一些讨论
- PHP数组下标加引号的理解
- poj1511
- Linux 下 DNS 污染解决办法
- [LeetCode]--47. Permutations II
- 转:Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结
- 数据库范式详解
- json属性名必须加引号的讨论
- 设计模式-享元模式
- 篮球赛场数据统计系统数据库设计实例
- android developer tiny share-20160804
- Go语言编程(九)之错误处理
- 遇到错误代码258ABBYY FineReader怎么处理
- JAVA字符串格式化-String.format()的使用
- iOS开发自己的sdk
- NuGet操作指令及在VS2012中如何使用