次のコードについて説明が必要です。
私が思い出したように、Utilities.jsonStringify() は関数を JSON オブジェクトに保存しませんでした。しかし今、彼らはそれを文字列として保存しています ("resultFn":"\nfunction (pageNum, pageSize, filter) {\n return [{a:\"abc1\", b:\"bcd1\"}, {a: \"abc2\", b:\"bcd2\"}, {a:\"abc3\", b:\"bcd3\"}, {a:\"abc4\", b:\"bcd4\"} ];\n})。
また、eval() を使用すると、関数を元に戻すことができます (myFunction のコードを参照してください)。少なくとも些細な例では、私にとってはうまくいきます。
Q: 私の知る限り、関数のシリアル化は標準外です。これは文書化されていないため、API コントラクトとして Google に依存できますか?
私も追加できますか - これにより、多くのコード行を節約できます:)
var fnResults = function(pageNum, pageSize, filter) {
return [
{ a: "abc1", b: "bcd1" },
{ a: "abc2", b: "bcd2" },
{ a: "abc3", b: "bcd3" },
{ a: "abc4", b: "bcd4" },
];
};
var TestConfig = {
pagerId: "TestId",
pageSize: 10,
widgetWidth: "15cm",
filterOptions: [],
resultFn: fnResults,
};
function myFunction() {
Logger.log(TestConfig.resultFn(1,2,3));
var s = Utilities.jsonStringify(TestConfig);
Logger.log(s);
var o = Utilities.jsonParse(s);
Logger.log(eval(o.resultFn)(1,2,3));
}