给定一个JSON数据字符串,如何安全地将该字符串转换为JavaScript对象?
很明显,我可以用这样的方式来做这件事:
var obj = eval("(" + json + ')');
但这让我很容易受到包含其他代码的JSON字符串的攻击,简单地eval似乎非常危险。
给定一个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);
其他回答
我不确定是否有其他方法可以做到这一点,但以下是在Prototype(JSON教程)中如何做到的。
new Ajax.Request('/some_url', {
method:'get',
requestHeaders: {Accept: 'application/json'},
onSuccess: function(transport){
var json = transport.responseText.evalJSON(true);
}
});
使用true作为参数调用evalJSON()将净化传入字符串。
jQuery方法现在已被弃用。请改用此方法:
let jsonObject = JSON.parse(jsonString);
使用已弃用的jQuery功能的原始答案:
如果您使用jQuery,只需使用:
jQuery.parseJSON( jsonString );
这正是您想要的(请参阅jQuery文档)。
试试这个。这是用打字机写的。
export function safeJsonParse(str: string) {
try {
return JSON.parse(str);
} catch (e) {
return str;
}
}
这个答案适用于IE<7,对于现代浏览器,请查看上面Jonathan的答案。
这个答案已经过时,Jonathan上面的答案(JSON.parse(jsonString))现在是最好的答案。
JSON.org有多种语言的JSON解析器,包括四种不同的JavaScript解析器。我相信大多数人都会考虑将json2.js作为他们的goto实现。
JSON.parse(jsonString);
json.parse将变为object。