javascript - 属性名称的 JSON 语法

在 javascript 中创建适用于大多数网络浏览器的对象的正确语法是什么(我的意思是:IE 6+、Firefox 2+、Opera 9+)

这是有效的

var a = {
  "class": "Person",
  "name": "William Shakespeare",
  "birthday": -12802392000000,
  "nickname": "Bill"
};

或者是这样的:

var a = {
  class: "Person",
  name: "William Shakespeare",
  birthday: -12802392000000,
  nickname: "Bill"
};

这两者有什么区别?

最佳答案

@AndreasN is correct : JSON specification指示使用引号以使其实际上是 JSON。如果不使用引号,它可能是 Javascript 中的有效对象文字,但不是 JSON。除浏览器端 Javascript 之外的其他服务使用 JSON(例如,使用 php、Java 等的 web 服务),如果您构造一个缺少引号的字符串,则无法保证它会被正确解析——尽管我怀疑大多数实现会是足够强大,可以这样做。

仅供引用,在 Javascript 中直接对来自无法防止恶意攻击的源的 JSON 字符串使用 eval() 是很危险的。再次,参见 JSON site它提供了更多的解释以及一个非常短的 javascript 文件,可以安全地将 JSON 字符串解析为 Javascript 对象。

编辑:我想从技术上讲,您最初的问题不是关于 JSON,而是关于 object literals 的 Javascript 语法。不同之处在于可从 JSON 字符串构造的对象将排除许多其他可能的对象字面量,例如:

var a = {cat: "meow", dog: "woof"};
var aname = {cat: "Garfield", dog: "Odie"};
var b = {
  counter: 0,
  pow: function(x) { return x+1; },
  zap: function(y) { return (counter += y); }
};
var c = {
  all: [a,aname],
  animals: a,
  names: aname,
};

对象文字“a”和“aname”可以用 JSON 表示(通过在属性名称中添加引号)。但是对象文字“b”和“c”不能。对象文字“b”包含函数(JSON 中不允许)。上面的对象文字“c”包含对其他变量的引用,这种引用在 JSON 中无法表示,因为其中一些引用是共享的。如果您对 c.names 进行更改,它也会更改 c.all[1],因为它们共享对同一变量的引用。 JSON 只能表达具有树状结构的对象(例如,整个对象的每个子元素都是独立的)。

https://stackoverflow.com/questions/380855/

相关文章:

objective-c - 使用 Json 在 Objective C 中发布数据

json - 从 react 组件进行 REST 调用

ruby - 为什么我会得到 "no implicit conversion of String i

javascript - 使用 application/json 优于 text/plain 的优势

json - 如何将对象映射到数组以便可以将其转换为 csv?

json - 如何在 Ubuntu 上看到一个漂亮的大型 JSON 文件?

c# - 返回 JSON 对象 (ASP.NET WebAPI)

python - 将 Json 嵌套到具有特定格式的 pandas DataFrame

python - 如何使用 JSON.loads 转换为 Python 日期时间对象?

jquery - REST Web 服务与类似 RPC 的服务有何区别?