给定一个JSON数据字符串,如何安全地将该字符串转换为JavaScript对象?

很明显,我可以用这样的方式来做这件事:

var obj = eval("(" + json + ')');

但这让我很容易受到包含其他代码的JSON字符串的攻击,简单地eval似乎非常危险。


当前回答

JSON.parse()将传递到函数中的任何JSON字符串转换为JSON对象。

要更好地理解它,请按F12在浏览器中打开“Inspect Element”,然后转到控制台编写以下命令:

var response = '{"result":true,"count":1}'; //sample json object(string form)
JSON.parse(response); //converts passed string to JSON Object.

现在运行命令:

console.log(JSON.parse(response));

您将得到一个Object{result:true,count:1}的输出。

为了使用该Object,可以将其分配给变量,可能是obj:

var obj = JSON.parse(response);

通过使用obj和点(.)操作符,您可以访问JSON对象的财产。

尝试运行以下命令:

console.log(obj.result);

其他回答

这似乎是一个问题:

通过Ajax websocket等接收的输入,它将是字符串格式,但您需要知道它是否是JSON.parsable。问题是,如果您始终通过JSON.parse运行它,程序可能会“成功”继续运行,但您仍然会看到控制台中抛出一个错误,显示可怕的“错误:意外标记'x'”。

var data;

try {
  data = JSON.parse(jqxhr.responseText);
} catch (_error) {}

data || (data = {
  message: 'Server error, please retry'
});

将对象转换为JSON,然后解析它,对我来说很有用,比如:

JSON.parse(JSON.stringify(object))

这个答案适用于IE<7,对于现代浏览器,请查看上面Jonathan的答案。

这个答案已经过时,Jonathan上面的答案(JSON.parse(jsonString))现在是最好的答案。

JSON.org有多种语言的JSON解析器,包括四种不同的JavaScript解析器。我相信大多数人都会考虑将json2.js作为他们的goto实现。

使用“JSON.parse()”中的简单代码示例:

var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}';
var contact = JSON.parse(jsontext);

并将其反转:

var str = JSON.stringify(arr);
$.ajax({
  url: url,
  dataType: 'json',
  data: data,
  success: callback
});

回调传递返回的数据,该数据将是JSON结构定义的JavaScript对象或数组,并使用$.parseJSON()方法进行解析。