Googleドライブにtext/plainで保存されたコードを読み込んで動かしたい。
こういうテキストファイルがあって、JavaScriptの中でオブジェクトにして使いたい。
eval()の引数に渡せばできますが、参考サイトに「必要以上に eval を使用しないで!」と書かれているのでeval()を使わない方法で試してみます。
以下のコード2.gsで new Function() を使って引数に文字列を入れる方法でやってみました。
その前にテスト用のデータを用意しておくコードもコード1.gsで書いておきました。
フォルダIDを設定して create_file() を実行すると
作成されたファイルのURLがログに出る
コード1.gs
var FOLDER_ID = "フォルダID";
function create_file() {
var data = '[{id: 123, message: "hello"}]'
var content_type = "text/plain";
var file_name = "test";
var blob = Utilities.newBlob("", content_type, file_name);
var file = blob.setDataFromString(data, "UTF-8");
var folder = DriveApp.getFolderById(FOLDER_ID);
var result = folder.createFile(file);
Logger.log(result.getUrl())
}
|
コード1.gsのcreate_file()実行後のログに出たURLからIDを取得して
コード2.gsのファイルIDに設定し
myFunction() を実行する
コード2.gsvar FILE_ID = "ファイルID";
function myFunction() {
var data = getData();
var obj = altEval(data);
var message = obj()["events"][0]["message"];
Logger.log(message)
}
function getData() {
var file = DriveApp.getFileById(FILE_ID);
var blob = file.getBlob()
var data = blob.getDataAsString();
return data;
}
function altEval(data) {
var obj = '{ events: ' + data + '}';
var str = 'return ' + obj;
var func = new Function(str);
return func;
}
|
実行結果
補足
ちなみに非推奨のeval()でやると
コード3.gsvar FILE_ID = "ファイルID";
function myFunction() {
var data = getData();
var obj = eval(data);
var message = obj[0]["message"];
Logger.log(message);
}
function getData() {
var file = DriveApp.getFileById(FILE_ID);
var blob = file.getBlob()
var data = blob.getDataAsString();
return data;
}
|
eval()を使う癖がつくと良くないので使わない方がよさそう。

