给定一串 JSON 数据,如何安全地将该字符串转换为 JavaScript 对象?
显然,我可以通过以下方式不安全地执行此操作:
var obj = eval("(" + json + ')');
但这使我容易受到包含其他代码的 JSON 字符串的影响,仅进行评估似乎很危险。
JSON.parse(jsonString)
是一种纯 JavaScript 方法,只要您可以保证使用合理的现代浏览器即可。
现在不推荐使用 jQuery 方法。请改用此方法:
let jsonObject = JSON.parse(jsonString);
使用不推荐使用的 jQuery 功能的原始答案 :
如果您使用的是 jQuery,请使用:
jQuery.parseJSON( jsonString );
正是您要找的东西(请参阅 jQuery 文档 )。
使用 “ JSON.parse() ” 中的简单代码示例:
var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}';
var contact = JSON.parse(jsontext);
并反转:
var str = JSON.stringify(arr);
我不确定其他实现方法,但是这是您在Prototype(JSON 教程)中的实现方法 。
new Ajax.Request('/some_url', {
method:'get',
requestHeaders: {Accept: 'application/json'},
onSuccess: function(transport){
var json = transport.responseText.evalJSON(true);
}
});
以 true 作为参数调用evalJSON()
清理传入的字符串。
这似乎是问题所在:
通过 Ajax websocket 等接收的输入,它将采用 String 格式,但是您需要知道它是否为JSON.parsable
。麻烦的是,如果您始终通过JSON.parse
运行它,则程序可以 “成功” 继续运行,但是您仍然会在控制台中看到一个可怕的"Error: unexpected token 'x'"
引发的"Error: unexpected token 'x'"
。
var data;
try {
data = JSON.parse(jqxhr.responseText);
} catch (_error) {}
data || (data = {
message: 'Server error, please retry'
});
如果您使用的是jQuery ,则还可以使用:
$.getJSON(url, function(data) { });
然后你可以做类似的事情
data.key1.something
data.key1.something_else
等等
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback
});
回调将传递返回的数据,该数据将是由 JSON 结构定义并使用$.parseJSON()
方法进行解析的 JavaScript 对象或数组。
只是为了好玩,这是使用函数的一种方式:
jsonObject = (new Function('return ' + jsonFormatData))()
尝试将此方法与此 Data 对象一起使用。例如: Data='{result:true,count:1}
'
try {
eval('var obj=' + Data);
console.log(obj.count);
}
catch(e) {
console.log(e.message);
}
当您进行串行端口编程时,此方法确实对 Node.js 有帮助