将JSONobj转换为Obj不起作用?

时间:2011-02-08 13:40:40

标签: javascript json

我正在尝试使用以下内容将JSON对象转换为“普通”对象...

        var slaobj = eval('('+s+')');

JSON。然而,它似乎没有工作(它的`.length'回来是未定义的)。我做错了什么?

5 个答案:

答案 0 :(得分:3)

  

这是`。length'以未定义的方式回归

它不一定具有length属性,除非它是一个数组或其他具有一个的对象。例如:

var json = '{"foo": "Value of foo"}';
var obj = eval('(' + json + ')');
alert(obj.foo); // alerts "value of foo"
alert(obj.length); // alerts "undefined", there's no `length` in `obj`

Live example


偏离主题:使用eval反序列化JSON文本可能是一个安全问题,除非您可以毫不含糊地信任JSON文本的来源(例如,它是您自己的服务器和你通过SSL连接),因为eval不解析JSON,它解析并运行JavaScript代码。 (添加括号并没有多大帮助。)你可以选择使用Douglas Crockford Github pageeval(他是JSON的发明者)。最后我检查过,有三种选择,其中两种根本不使用eval;有关详细信息,请参阅页面底部的自述文件。

答案 1 :(得分:1)

对象并非都具有“.length”属性。对象文字如:

{ 'foo': 100, 'bar': 'Abraham Lincoln' }

描述了一个没有“.length”属性的对象。

JavaScript 数组对象具有“。length”属性,因为语言运行时的工作方式。但是,如果你把它放在那里,JavaScript中的普通对象只有这样的属性。

答案 2 :(得分:0)

更新:啊,我知道,这就是括号的用途。大鼠。删除了第一部分。

但这仍然有效:

  

请勿使用eval!

     

eval()是一个危险的函数,它   执行它传递的代码   来电者的特权。如果你跑   eval()带有可能的字符串   受恶意方影响,您可以   最终运行恶意代码   具有权限的用户机器   您的网页/扩展程序。更多   重要的是,第三方代码可以看到   调用eval()的范围,   这可能导致可能的攻击   类似功能的方式   不容易受到影响。

来源: Mozilla JavaScript Reference: eval()

答案 3 :(得分:0)

你是如何检索对象的?

我想说还有其他问题 - 你确定's'的JSON对象是否正确返回了? JSON.org

  

要将JSON文本转换为对象,可以使用eval()函数。 eval()调用JavaScript编译器。由于JSON是JavaScript的适当子集,因此编译器将正确解析文本并生成对象结构。文本必须包含在parens中,以避免绊倒JavaScript语法中的歧义。

var myObject = eval('(' + myJSONtext + ')');

答案 4 :(得分:0)

http://www.jsonlint.com/此网站具有良好的JSON字符串验证,您应始终随意使用。当JSON字符串非常大时,验证它是很好的。

也不要使用eval()来获取JSON对象。 Visit http://www.json.org/它有非常好的指南行检查它。

今天有许多JavaScript库提供JSON API。我建议您使用其中一个以确保安全。

http://api.jquery.com/jQuery.getJSON/

http://developer.yahoo.com/yui/json/

http://dojotoolkit.org/reference-guide/dojo/_base/json.html