Javascript JSON中的函数
我有包含函数名的JSON:Javascript JSON中的函数,javascript,json,Javascript,Json,我有包含函数名的JSON: { "login": "do_login", "logout": "do_logout" } 解析该JSON后是否可以调用函数do_login和do_logout 我的意思是: var obj = JSON.parse({"login": "do_login","logout": "do_logout"}
{
"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]();
您可以这样做:
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"]]();
查看一把正在工作的小提琴来查看它的运行情况:您可能会对JSON是什么感到困惑。JSON是表示对象的字符串。上面的内容称为对象文字 JSON字符串看起来像这样“{\“login\”:“do\u login\”,“logout\”:“do\u 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对象。假设函数存在于全局范围中。值得检查,以便在JSON源不受信任的情况下,不要尝试调用未定义的
obj.login
。不,会出现类型错误,因为obj.login
不是函数。它不是作为函数调用obj.login
,而是调用一个函数,该函数的名称是window对象内obj.login
的字符串值。如果您想调用另一个对象的方法,只需执行myInstance[obj.login]()
,在这种情况下,您不需要JSON解析。你从哪里得到这个东西的?它是一个字符串,因此你想重新解析它?很高兴看到有人区分JSON和JS对象,但我认为OP的代码将对象中的函数名(无论OP称之为“JSON”的实际上是否为JSON)作为字符串,并希望使用该名称调用函数(必须在别处定义).这与OP的问题无关。@Jan-你错了。json中的字符串可以是obj
上使用的参数。也许你对这个答案的措辞感到困惑。例如,OP想要调用函数“do_login”,然后他们可以从其作用域调用它。我在这里建议先构建作用域,而不是使用全局作用域。您没有解释这一点,您使用与OP相同的名称,但要做不同的事情。并且obj[“login”]
不会执行函数,只返回它。类似这样:var obj=JSON.parse(jsonString);var myFunc={};myFunc.do_login=function(){//login code};obj[jsonString.login]()代码>更有意义。括号的要求是正确的,可编辑以更改。