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

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

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

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


当前回答

如果使用jQuery,还可以使用:

$.getJSON(url, function(data) { });

然后你可以做类似的事情

data.key1.something
data.key1.something_else

etc.

其他回答

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

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

并将其反转:

var str = JSON.stringify(arr);

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);

摘要:

Javascript(浏览器和NodeJS)有一个内置的JSON对象。在这个Object上有两种处理JSON的方便方法。它们如下:

JSON.parse()将JSON作为参数,返回JS对象JSON.stringify()将JS对象作为参数返回JSON对象

其他应用:

除了非常方便地处理JSON之外,它们还可以用于其他方式。两种JSON方法的结合使我们可以非常容易地制作数组或对象的深度克隆。例如:

设arr1=[1,2,[3,4]];让newArr=arr1.slice();arr1[2][0]=“已更改”;console.log(newArr);//不是深度克隆设arr2=[1,2,[3,4]];让newArrDeepclon=JSON.parse(JSON.stringify(arr2));arr2[2][0]=“已更改”;console.log(newArrDeepclone);//深度克隆,值不变

使用JSON.Parse()解析JSON字符串,数据将成为JavaScript对象:

JSON.parse(jsonString)

这里,JSON表示处理JSON数据集。

想象一下,我们从web服务器收到了以下文本:

'{ "name":"John", "age":30, "city":"New York"}'

要解析为JSON对象,请执行以下操作:

var obj = JSON.parse('{ "name":"John", "age":30, "city":"New York"}'); 

这里obj是相应的JSON对象,看起来像:

{ "name":"John", "age":30, "city":"New York"}

要获取值,请使用。操作员:

obj.name // John
obj.age //30

使用JSON.stringify()将JavaScript对象转换为字符串。

我不确定是否有其他方法可以做到这一点,但以下是在Prototype(JSON教程)中如何做到的。

new Ajax.Request('/some_url', {
  method:'get',
  requestHeaders: {Accept: 'application/json'},
  onSuccess: function(transport){
    var json = transport.responseText.evalJSON(true);
  }
});

使用true作为参数调用evalJSON()将净化传入字符串。