我有包含函数名称的 JSON:
{
"login": "do_login",
"logout": "do_logout"
}
解析该 JSON 后是否可以调用函数do_login
和do_logout
?
我的意思是:
var obj = JSON.parse({"login": "do_login","logout": "do_logout"});
obj.login();
我有包含函数名称的 JSON:
{
"login": "do_login",
"logout": "do_logout"
}
解析该 JSON 后是否可以调用函数do_login
和do_logout
?
我的意思是:
var obj = JSON.parse({"login": "do_login","logout": "do_logout"});
obj.login();
我不确定我是否理解正确,但试试这个
window[obj.login]();
您可能对 JSON 是什么感到困惑。JSON 是一个表示对象的字符串。您上面所拥有的称为对象文字。
JSON 字符串看起来像这样 "{\"login\":\"do_login\",\"logout\":\"do_logout\"}"
这是一个常见的错误,因为两者都有相似的布局。这绝非偶然。当 Crawford 提出 JSON 时,他以 javascript 对象文字为模型。
函数不会转换为 JSON 字符串,JSON.stringify 将忽略它们。
例子:
var foo = {
bar: function() {
console.log('bar');
},
something: 'something'
}
JSON.stringify(foo) // "{\"something\":\"something\"}"
我可以在我的代码中运行 foo.bar() ,但这不是 JSON,它是一个 JS 对象。
你可以这样做:
var obj = function(){};
obj.login = function(){
//login code
};
obj["login"]();//call login function
这是一个措辞更好的例子:
var Functions = function(){};
Functions.do_login = function(){
//login code
};
var callbacks = JSON.parse('{"login":"do_login","logout":"do_logout"}');
Functions[callbacks["login"]]();
查看一个工作小提琴以查看它的实际效果:http: //jsfiddle.net/hvx7m/2/