関数名を含む 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/