给定一个JSON数据字符串,如何安全地将该字符串转换为JavaScript对象?
很明显,我可以用这样的方式来做这件事:
var obj = eval("(" + json + ')');
但这让我很容易受到包含其他代码的JSON字符串的攻击,简单地eval似乎非常危险。
给定一个JSON数据字符串,如何安全地将该字符串转换为JavaScript对象?
很明显,我可以用这样的方式来做这件事:
var obj = eval("(" + json + ')');
但这让我很容易受到包含其他代码的JSON字符串的攻击,简单地eval似乎非常危险。
当前回答
jQuery方法现在已被弃用。请改用此方法:
let jsonObject = JSON.parse(jsonString);
使用已弃用的jQuery功能的原始答案:
如果您使用jQuery,只需使用:
jQuery.parseJSON( jsonString );
这正是您想要的(请参阅jQuery文档)。
其他回答
如果使用jQuery,还可以使用:
$.getJSON(url, function(data) { });
然后你可以做类似的事情
data.key1.something
data.key1.something_else
etc.
使用“JSON.parse()”中的简单代码示例:
var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}';
var contact = JSON.parse(jsontext);
并将其反转:
var str = JSON.stringify(arr);
这个答案适用于IE<7,对于现代浏览器,请查看上面Jonathan的答案。
这个答案已经过时,Jonathan上面的答案(JSON.parse(jsonString))现在是最好的答案。
JSON.org有多种语言的JSON解析器,包括四种不同的JavaScript解析器。我相信大多数人都会考虑将json2.js作为他们的goto实现。
我知道,老问题是,但是没有人注意到这个解决方案,因为它使用了new Function(),一个返回数据的匿名函数。
举个例子:
var oData = 'test1:"This is my object",test2:"This is my object"';
if( typeof oData !== 'object' )
try {
oData = (new Function('return {'+oData+'};'))();
}
catch(e) { oData=false; }
if( typeof oData !== 'object' )
{ alert( 'Error in code' ); }
else {
alert( oData.test1 );
alert( oData.test2 );
}
这稍微安全一点,因为它在函数内部执行,而不直接在代码中编译。因此,如果其中有函数声明,它将不会绑定到默认的窗口对象。
我使用它来简单快速地“编译”DOM元素(例如数据属性)的配置设置。
在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吗?
差不多,是的(见参考资料)。