javascript - js字符串转json - 将json转为对象
安全地将JSON字符串转换为对象 (14)
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}。
为了使用这个对象,你可以把它分配给变量让我们说obj: -
var obj = JSON.parse(response);
现在通过使用obj和dot(。)运算符,您可以访问JSON对象的属性。
尝试运行该命令
console.log(obj.result);
给定一串JSON数据,你怎样才能安全地将该字符串转换为JavaScript对象?
显然你可以用这样的东西不安全地做...
var obj = eval("(" + json + ')');
...但这让我们容易受到包含其他代码的json字符串的影响,这对于简单的eval来说似乎非常危险。
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 || {};
}
};
JSON.parse(jsonString)
是一种纯粹的JavaScript方法,只要你能保证一个合理的现代浏览器。
正式记录 :
JSON.parse()
方法分析JSON字符串,构造由字符串描述的JavaScript值或对象。 可以提供可选的reviver
函数,以便在返回结果对象之前执行转换。
句法
JSON.parse(text[, reviver])
参数
文本
要解析为JSON的字符串。 有关JSON语法的描述,请参阅JSON对象。
reviver(可选)
如果一个函数,它规定了最初由解析产生的值如何转换,然后再返回。
返回值
与给定的JSON文本相对应的Object。
例外
如果要解析的字符串不是有效的JSON,则会抛出SyntaxError异常。
使用parse()
方法的最简单方法是:
var response = '{"result":true,"count":1}';
var JsonObject= JSON.parse(response);
那么你可以得到Json
元素的值,例如:
var myResponseResult = JsonObject.result;
var myResponseCount = JsonObject.count;
按照documentation描述使用jQuery :
JSON.parse(jsonString);
使用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);
如果你使用jQuery ,你也可以做$.getJSON(url, function(data) { });
然后你可以做一些事情,比如data.key1.something
, data.key1.something_else
等。
如果你想这个方法可以用这种方式。这里你想要的数据对象例如:Data ='{result:true,count:1}'
try {
eval('var obj=' + Data);
console.log(obj.count);
}
catch(e) {
console.log(e.message);
}
这个方法真的有助于Nodejs如果你正在使用串口编程
您也可以使用reviver
函数进行过滤。
var data = JSON.parse(jsonString, function reviver(key, value) {
//your code here to filter
});
有关更多信息,请阅读JSON.parse(jsonString)
我不确定其他方法来做到这一点,但这里是你如何在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_sans_eval一段时间了。 据其作者称,它比json2.js更安全。
这似乎是问题:
接收到的输入,通过ajax websocket等,它总是会以字符串格式 - 但你需要知道它是否是JSON.parsable。 Touble是,如果你总是通过JSON.parse运行它,那么程序可能会继续'成功',但你仍然会在控制台中看到一个可怕的“Error:unexpected token'x'”错误。
var data;
try {
data = JSON.parse(jqxhr.responseText);
} catch (_error) {}
data || (data = {
message: 'Server error, please retry'
});
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback
});
该回调将传递返回的数据,该数据将成为JSON结构定义的JavaScript对象或数组,并使用$.parseJSON()
方法进行分析。