给定一个JSON数据字符串,如何安全地将该字符串转换为JavaScript对象?
很明显,我可以用这样的方式来做这件事:
var obj = eval("(" + json + ')');
但这让我很容易受到包含其他代码的JSON字符串的攻击,简单地eval似乎非常危险。
给定一个JSON数据字符串,如何安全地将该字符串转换为JavaScript对象?
很明显,我可以用这样的方式来做这件事:
var obj = eval("(" + json + ')');
但这让我很容易受到包含其他代码的JSON字符串的攻击,简单地eval似乎非常危险。
当前回答
JSON.parse(jsonString);
json.parse将变为object。
其他回答
我不确定是否有其他方法可以做到这一点,但以下是在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);
使用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);
在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吗?
差不多,是的(见参考资料)。
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback
});
回调传递返回的数据,该数据将是JSON结构定义的JavaScript对象或数组,并使用$.parseJSON()方法进行解析。