安全地将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更安全。