Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSON中的函数_Javascript_Json - Fatal编程技术网

Javascript 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"}

我有包含函数名的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]();
您可以这样做:

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]()更有意义。括号的要求是正确的,可编辑以更改。