从服务器端解析json对象

时间:2011-07-27 11:18:39

标签: javascript json

在我的网络服务中,我在方法中返回一个json对象:

{name:'xx'}

我使用ajax发送请求,然后使用'eval'

解析它们
onComplete:function(req){
  var data=eval(req.responseText);
  //do something according data
}

然而,我无法获得'数据'。

当我退回以下字符串时:

[{name:'xx'}]

它有效,我把'数据'作为一个数组。

通过谷歌,我知道它是由返回字符串中的'{'引起的。

所以我想知道是否没有办法重新启动json对象?

3 个答案:

答案 0 :(得分:2)

使用JSON.parse或jquery的$.parseJSON - 如果使用jquery - 而不是eval。
此外,如果使用jquery,则可以利用内置的ajax方法自动检索并将响应解析为json对象:$.getJson

如果您仍然不想修改“逻辑”,可以尝试使用添加的括号来评估您的回复:var data = eval('(' + req.responseText + ')');

答案 1 :(得分:1)

JSON hijacking上阅读此博客文章。作者解释了您遇到的问题

  

在与JSON相关时,您可能已经看到过以下代码:

     

eval('('+JSON_DATA+')');

     

注意开始和结束括号,这是强制的   JavaScript将数据作为对象而不是块语句执行   上文提到的。如果JavaScript确实尝试执行JSON数据   没有括号和JSON数据确实以“{”开头   然后会出现语法错误,因为块语句将是   无效。

     

... 有关 ...

的更多信息

您应该使用()JSON.parse,而不是在您的JSON响应中添加$.parseJSON,而不是像gion_13所说的那样。 Eval不是要走的路。

另外,就像昆汀在评论中所说的那样,你需要更改你正在返回的JSON invalid。您需要引用您的密钥和价值。

答案 2 :(得分:0)

  

它有效,我把'数据'作为一个数组。

这就是应该做的。 []是声明数组的语法。如果你想要内部对象,那么只需返回{name: 'XX'}