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

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

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

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


当前回答

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

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

然后你可以做类似的事情

data.key1.something
data.key1.something_else

etc.

其他回答

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

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

然后你可以做类似的事情

data.key1.something
data.key1.something_else

etc.

仅针对不同输入类型的封面解析

使用JSON.Parse()解析数据,数据将成为JavaScript对象。

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

当对从数组派生的JSON使用JSON.parse()时,该方法将返回JavaScript数组,而不是JavaScript对象。

var myArr = JSON.parse(this.responseText);
console.log(myArr[0]);

JSON中不允许使用日期对象。约会时做这样的事

var text = '{ "name":"John", "birth":"1986-12-14", "city":"New York"}';
var obj = JSON.parse(text);
obj.birth = new Date(obj.birth);

JSON中不允许使用函数。如果需要包含函数,请将其写成字符串。

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

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

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

并将其反转:

var str = JSON.stringify(arr);

在JavaScript中解析JSON的推荐方法是使用JSON.parse()

出身背景

JSON API是在ECMAScript 5中引入的,目前已在99%以上的浏览器中实现(按市场份额)。

jQuery曾经有一个$.parseJSON()函数,但在jQuery 3.0中已弃用。无论如何,在很长一段时间里,它只是JSON.parse()的包装器。

实例

const json=“{”城市“:”波士顿“,”人口“:500000}”;const object=JSON.parse(JSON);console.log(object.city,object.population);


浏览器兼容性

所有主要浏览器都支持JSON.parse吗?

差不多,是的(见参考资料)。

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