给定一个JSON数据字符串,如何安全地将该字符串转换为JavaScript对象?
很明显,我可以用这样的方式来做这件事:
var obj = eval("(" + json + ')');
但这让我很容易受到包含其他代码的JSON字符串的攻击,简单地eval似乎非常危险。
给定一个JSON数据字符串,如何安全地将该字符串转换为JavaScript对象?
很明显,我可以用这样的方式来做这件事:
var obj = eval("(" + json + ')');
但这让我很容易受到包含其他代码的JSON字符串的攻击,简单地eval似乎非常危险。
当前回答
使用“JSON.parse()”中的简单代码示例:
var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}';
var contact = JSON.parse(jsontext);
并将其反转:
var str = JSON.stringify(arr);
其他回答
您也可以使用reviver函数进行过滤。
var data = JSON.parse(jsonString, function reviver(key, value) {
//your code here to filter
});
有关详细信息,请阅读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);
我不确定是否有其他方法可以做到这一点,但以下是在Prototype(JSON教程)中如何做到的。
new Ajax.Request('/some_url', {
method:'get',
requestHeaders: {Accept: 'application/json'},
onSuccess: function(transport){
var json = transport.responseText.evalJSON(true);
}
});
使用true作为参数调用evalJSON()将净化传入字符串。
使用JSON.parse可能是最好的方法。
这里有一个例子
var jsonRes = '{ "students" : [' +
'{ "firstName":"Michel" , "lastName":"John" ,"age":18},' +
'{ "firstName":"Richard" , "lastName":"Joe","age":20 },' +
'{ "firstName":"James" , "lastName":"Henry","age":15 } ]}';
var studentObject = JSON.parse(jsonRes);
将对象转换为JSON,然后解析它,对我来说很有用,比如:
JSON.parse(JSON.stringify(object))