安全地将JSON字符串转换为对象
时间:2020-03-05 18:47:58 来源:igfitidea点击:
给定一串JSON数据,我们如何安全地将该字符串转换为JavaScript对象?
显然,我们可以使用类似...的方法不安全地执行此操作。
var obj = eval("(" + json + ')');
...但是这使我们容易受到包含其他代码的json字符串的影响,简单地进行评估似乎很危险。
解决方案
回答
我不确定其他方法可以执行此操作,但是这是我们在Prototype(JSON教程)中的操作方法。
new Ajax.Request('/some_url', { method:'get', requestHeaders: {Accept: 'application/json'}, onSuccess: function(transport){ var json = transport.responseText.evalJSON(true); } });
以true作为参数调用evalJSON()会清理传入的字符串。
回答
编辑:这个答案是针对IE <7的,对于现代浏览器,请检查上述乔纳森的答案。
编辑:这个答案已经过时,上面的乔纳森(JSON.parse(jsonString)`)的答案现在是最好的答案。
JSON.org具有适用于多种语言的JSON解析器,包括4种不同的Javascript语言。我相信大多数人都会将json2.js视为其goto实现。
回答
如果我们使用的是jQuery,则还可以执行$ .getJSON(url,function(data){});`
然后,我们可以执行" data.key1.something"," data.key1.something_else"等操作。
回答
$.ajax({ url: url, dataType: 'json', data: data, success: callback });
回调将传递返回的数据,该数据将是由JSON结构定义并使用$ .parseJSON()方法解析的JavaScript对象或者数组。
回答
现在不推荐使用jQuery方法。请改用此方法:
let jsonObject = JSON.parse(jsonString);
使用不推荐使用的jQuery功能的原始答案:
如果我们使用的是jQuery,请使用:
jQuery.parseJSON( jsonString );
正是我们要找的东西(请参阅jQuery文档)。
回答
我已经成功使用json_sans_eval一段时间了。根据其作者,它比json2.js更安全。