快速提问。在JavaScript中使用eval是不安全的,不是吗?我有一个JSON对象作为字符串,我需要将其转换为实际对象,以便可以获取数据:
function PopulateSeriesFields(result)
{
data = eval('(' + result + ')');
var myFakeExample = data.exampleType
}
如果有帮助的话,我正在使用jQuery的$.ajax方法。
谢谢
快速提问。在JavaScript中使用eval是不安全的,不是吗?我有一个JSON对象作为字符串,我需要将其转换为实际对象,以便可以获取数据:
function PopulateSeriesFields(result)
{
data = eval('(' + result + ')');
var myFakeExample = data.exampleType
}
如果有帮助的话,我正在使用jQuery的$.ajax方法。
谢谢
在使用jQuery时,无论安全与否,最好使用$.getJSON()方法而不是$.ajax():
$.getJSON(url, function(data){
alert(data.exampleType);
});
eval()
通常在与自己的服务器通信且在服务器端使用良好的JSON库保证生成的JSON不包含任何有害内容时被视为安全的JSON解析方法。
即使是JSON的作者Douglas Crockford也说,除了用于解析JSON之外,在代码中不应该使用eval()
。请参阅他的书中相应部分JavaScript: The Good Parts
不安全?这取决于您是否信任数据。
如果您可以确信该字符串是JSON格式(例如不包含函数),那么它就是安全的。
话虽如此 - 如果您正在使用jQuery,为什么要手动处理呢?使用dataType选项指定为JSON格式,让库来为您处理。
使用JavaScript的eval
是不安全的。因为JSON只是JavaScript的一个子集,但是JavaScript的eval
允许任何有效的JavaScript。
相反,使用来自json.org的真正的JSON解析器。
你可以这样尝试
var object = new Function("return " + jsonString)()
另一个很好的选择是YUI: http://yuilibrary.com/yui/docs/json/
因此,您的代码将类似于:
Y.JSON.parse('{"id": 15, "name": "something"}');