为什么要 eval这里要添加 “("("+data+")");//”呢?
加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。
****************************************************************************************************************************************************************************************
《javascript 高级程序设计 第二版》page73,第五章,引用类型
5.1object类型
到目前为止,我们看到的大多数引用类型值都是object类型的实例;而且,object也是ECMAScript中使用最多的一个类型。虽然object的实例不具备多少功能,但对于在应用程序中存储和传输数据而言,它们确实是非常理想的选择。
创建object实例的方式有两种。第一种是使用new操作符后跟object构造函数,如下所示:
var person=new object();
person.name="Nicholas";
person.age=29;
另一种方式是使用对象字面量表示法。对象字面量是对象定义的一种简写形式,目的在于简化创建包含大量属性的对象的过程。下面这个例子就使用了对象字面量语法定义了与前面那个例子中相同的person对象:
var person={
name:"Nicholas",
age:29
};
在这个例子中,左边的花括号({)表示对象字面量的开始,因为它出现在了赋值操作符的后面(在其他环境中,左花括号表示的是语句块的开始)。然后,我们定义了name属性,之后是一个冒号,再后面是这个属性的值。在对象字面量中,使用逗号来分隔不同的属性,因此“Nicholas”后面是一个逗号。但是,在age属性的值29的后面不能添加逗号,因为age是这个对象的最后一个属性。在最后一个属性后面添加逗号,会在IE及Opera中导致错误。
在使用对象字面量语法时,属性名也可以使用字符串,如下面这个例子所示:
var person={
"name":"Nicholas",
"age":29
};
以上代码也会得到与前面例子相同的结果;创建一个带有name和age属性的新对象。
另外,使用对象字面量语法时,如果留空其花括号,则可以定义只包含默认属性和方法的对象,
---下面这个是天蓝自己找的---
http://www.zhihu.com/question/19884767
在 JavaScript 中,怎样把一个对象转化成 JSON 字符串?
是问如何把js对象方便的转为json字符串哦~~
(而不是把json字符串变成js对象)
不推荐eval的方法,太危险。
这里有:
http://tangram.baidu.com/api.html#baidu.json.stringify
http://code.google.com/p/jquery-json/
补充一点:楼上楼下你们仔细看题了么?
第二种 去官网下载一个json2.js 然后用json.parse()方法 这个方法firefox chrome是直接支持的 ie需要引入json2.js
不推荐eval方法 具体还可以参看这个帖子 相当详细
http://stackoverflow.com/questions/45015/safely-turning-a-json-string-into-an-object
这里有个 jQuery plus. 自己可以转化成 JavaScript 版本(不依赖jQuery)
如果你有jquery 为什么不直接使用呢?
其次 我一直认为json数据格式 就是类似前端对象格式啊{} 我说类似啊 类似
现代浏览器中提供了JSON.stringify()方法,用来实现这个功能。
json2.js中对不支持JSON.stringify()的浏览器增加了支持,可以见其源代码。
----------------------------------------------------
下面是我发现自己看错之前打出来的,不想删了。
现代浏览器有一个JSON对象,JSON的parse方法可以把字符串格式化成json。
jStr={"a":"b"}
jObj=JSON.parse(jStr);
但是这个方法比较严格:
- 键必须加上引号,比如{"key":"sometext"},如果没有引号{key:"sometext"}就会报错。(其实json的标准就是这个样子,对于不会后台语言的新手来说,手写json字符串就可能忘掉键上的那对引号。)
- 如果你的键或者值中含tab形成的跳格,也会报错。
jStr={"a":"b"}
jObj=eval("("+jStr+")")
比如:
jStr = {
"a": (function() {
alert(1)
})()
}
jQuery中自带jQuery.parseJSON()封装了json字符串转对象的功能,其原理是优先使用原生JSON.parse;如果没有,则用eval。使用eval之前jQuery会对字符串进行安全性处理。(所以有时候你的json不严格可能导致chrome下报错而IE6反而没问题。)
json2.js同。所以最好是使用jQuery,如果你嫌大了(几十k也算大的话),就用json2.js