给定一个JSON数据字符串,如何安全地将该字符串转换为JavaScript对象?
很明显,我可以用这样的方式来做这件事:
var obj = eval("(" + json + ')');
但这让我很容易受到包含其他代码的JSON字符串的攻击,简单地eval似乎非常危险。
给定一个JSON数据字符串,如何安全地将该字符串转换为JavaScript对象?
很明显,我可以用这样的方式来做这件事:
var obj = eval("(" + json + ')');
但这让我很容易受到包含其他代码的JSON字符串的攻击,简单地eval似乎非常危险。
当前回答
使用parse()方法的最简单方法:
var response = '{"result":true,"count":1}';
var JsonObject= JSON.parse(response);
然后可以获得JSON元素的值,例如:
var myResponseResult = JsonObject.result;
var myResponseCount = JsonObject.count;
使用jQuery.parseJSON()文档中描述的jQuery:
JSON.parse(jsonString);
其他回答
JSON解析总是一个难题。如果输入不符合预期,则会抛出错误并使您正在执行的操作崩溃。
您可以使用下面的小函数来安全地解析输入。即使输入无效或已经是一个对象,它也始终会转换对象,这在大多数情况下更好:
JSON.safeParse = function (input, def) {
// Convert null to empty object
if (!input) {
return def || {};
} else if (Object.prototype.toString.call(input) === '[object Object]') {
return input;
}
try {
return JSON.parse(input);
} catch (e) {
return def || {};
}
};
摘要:
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);//深度克隆,值不变
另一种选择
const json=“{”水果“:”菠萝“,”手指“:10}”让j0s,j1s,j2s,j3sconsole.log(`{“${j0s=“fruit”}”:“${j1s=“菠萝”}”,“${j2s=“fingers”}”:${j3s=“10”}}`)
我不确定是否有其他方法可以做到这一点,但以下是在Prototype(JSON教程)中如何做到的。
new Ajax.Request('/some_url', {
method:'get',
requestHeaders: {Accept: 'application/json'},
onSuccess: function(transport){
var json = transport.responseText.evalJSON(true);
}
});
使用true作为参数调用evalJSON()将净化传入字符串。
使用parse()方法的最简单方法:
var response = '{"result":true,"count":1}';
var JsonObject= JSON.parse(response);
然后可以获得JSON元素的值,例如:
var myResponseResult = JsonObject.result;
var myResponseCount = JsonObject.count;
使用jQuery.parseJSON()文档中描述的jQuery:
JSON.parse(jsonString);