给定一串JSON数据,如何安全地将该字符串转换为JavaScript对象?
显然,我可以使用类似的方法不安全地执行此操作:
var obj = eval("(" + json + ')');
但这使我容易受到包含其他代码的JSON字符串的影响,仅进行评估似乎很危险。
给定一串JSON数据,如何安全地将该字符串转换为JavaScript对象?
显然,我可以使用类似的方法不安全地执行此操作:
var obj = eval("(" + json + ')');
但这使我容易受到包含其他代码的JSON字符串的影响,仅进行评估似乎很危险。
试试这个。这是用 TypeScript写的。
export function safeJsonParse(str: string) {
try {
return JSON.parse(str);
} catch (e) {
return str;
}
}
您也可以使用reviver
功能进行过滤。
var data = JSON.parse(jsonString, function reviver(key, value) {
//your code here to filter
});
有关更多信息,请阅读JSON.parse
。
JSON.parse是将字符串转换为对象的正确方法,但是如果所解析的字符串不是对象或字符串不正确,则它将抛出错误,导致其余代码中断,因此将JSON.parse函数包装在try-catch中的理想选择
try{
let obj = JSON.parse(string);
}catch(err){
console.log(err);
}
官方文件:
该JSON.parse()
方法解析JSON字符串,以构造JavaScript值或该字符串描述的对象。reviver
可以提供一个可选函数,以在返回结果对象之前对其执行转换。
句法:
JSON.parse(text[, reviver])
参数:
text
:要解析为JSON的字符串。有关JSON语法的说明,请参见JSON对象。
reviver (optional)
:如果是函数,则此函数规定了在返回之前如何转换最初由解析产生的值。
返回值
与给定JSON文本相对应的Object。
例外情况
如果要解析的字符串无效的JSON,则引发SyntaxError异常。
JSON.parse(jsonString);
json.parse将变为object。
如果我们有这样的字符串:
"{\"status\":1,\"token\":\"65b4352b2dfc4957a09add0ce5714059\"}"
然后我们只需使用JSON.parse
两次即可将此字符串转换为JSON对象:
var sampleString = "{\"status\":1,\"token\":\"65b4352b2dfc4957a09add0ce5714059\"}"
var jsonString= JSON.parse(sampleString)
var jsonObject= JSON.parse(jsonString)
我们可以使用以下方法从JSON对象提取值:
// instead of last JSON.parse:
var { status, token } = JSON.parse(jsonString);
结果将是:
status = 1 and token = 65b4352b2dfc4957a09add0ce5714059
将对象转换为JSON,然后解析它对我来说很有效,例如:
JSON.parse(JSON.stringify(object))
如果您使用的是jQuery,则还可以使用:
$.getJSON(url, function(data) { });
然后您可以做类似的事情
data.key1.something
data.key1.something_else
等等
现在不推荐使用jQuery方法。请改用此方法:
let jsonObject = JSON.parse(jsonString);
使用不推荐使用的jQuery功能的原始答案:
如果您使用的是jQuery,请使用:
jQuery.parseJSON( jsonString );
正是您要找的东西(请参阅jQuery 文档)。
JSON.parse(jsonString)
只要您可以保证使用相当现代的浏览器,它就是一种纯JavaScript方法。