2011-02-08 28 views
0

我试图JSON对象转换为使用下面的一个“正常”的对象......将JSONobj转换为Obj无法正常工作?

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

S为JSON。然而,它似乎并没有工作(这是'。长'回来未定义)。我究竟做错了什么?

+1

可以ü提供JSON字符串的样本?而.length是一个属性 - 不是一个函数,对吧? (只是检查) – DashK 2011-02-08 13:45:18

回答

3

这是`。长度”是回来为未定义

它不一定有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的(他是JSON的发明者)的eval。最后我检查了一下,有三种替代方案,其中两种根本不使用eval;有关详细信息,请参阅页面底部的自述文件。

+0

`json2.js`仍然使用`eval`(经过一些检查)。你也可以看看[json-sans-eval](http://code.google.com/p/json-sans-eval/)。 – 2011-02-08 14:09:55

+0

@Marcel:`json2.js`的确,是的(在使用正则表达式去除大多数事物之后),但是`json_parse.js`和`json_parse_state.js`(也在该链接上)不会。这就是我的意思是“替代品”。 `json2.js`使用正则表达式+`eval`,`json_parse.js`是一个递归下降解析器,`json_parse_state.js`是一个状态机。 – 2011-02-08 15:03:55

1

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

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

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

JavaScript Array由于语言运行时的工作方式,对象具有“.length”属性。但是,如果你把它放在那里,JavaScript中的一个普通对象只有这样一个属性。

0

更新:啊,我明白了,这就是括号里的内容。大鼠。删除了第一部分。

但是,这仍然有效:

不要使用eval!

的eval()是一个危险的功能,这 执行它与呼叫者的 权限通过代码。如果您运行 eval()的字符串可能是 受恶意方的影响,您可能会在 用户的计算机上以 的权限在您的网页/扩展程序上运行恶意代码。更重要的是,第三方代码可以看到 eval()被调用的范围, 可能导致可能的攻击,其中类似的功能是 不容易受到攻击。

来源:Mozilla JavaScript Reference: eval()

0

你是如何获取的对象?

我会说必须有其他错误 - 你确定'''JSON对象被正确返回? JSON.org

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

var myObject = eval('(' + myJSONtext + ')'); 
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

相关问题