当前位置:  开发笔记 > 编程语言 > 正文

属性名称的JSON语法

如何解决《属性名称的JSON语法》经验,为你挑选了4个好方法。

在javascript中创建对象的正确语法是什么,它将适用于大多数Web浏览器(我的意思是: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" 
       } ;

这两者有什么区别?



1> Jason S..:

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

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

编辑:我想技术上你的原始问题不是关于JSON,而是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只能表示具有树结构的对象(例如,整个对象的每个子元素都是独立的).



2> James..:

如果IE因你的第二个例子而失败,那是因为'Class'是一个保留字(仅在IE中).一般来说,最好用引号括起你的属性名称 - 这意味着它总是可以工作,无论情况如何.


class实际上是所有浏览器中的保留字.这只是因为IE在使用时决定失败.

3> AndreasN..:

该规范说用"".

Firefox接受没有,但IE没有.

对被定义为

string : value

值可以是字符串字符串定义为

" chars "



4> Gareth..:

您必须在包含除字符之外的任何内容的属性周围使用"引号"

{foo-bar: 3} // invalid
{"foo-bar": 3} // valid

除此之外,两者之间没有区别,我想两种方式都适用于所有浏览器

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有