GASでJSONレスポンス変換
GAS実践でJSON操作を始める
Google Apps Script(GAS)は、スプレッドシートやドキュメントと連携しながら、外部APIとのデータ交換を行う際にJSONを頻繁に扱います。まずは、JSON操作の基本を押さえておくことが重要です。GASでは、UrlFetchApp.fetch()で取得したレスポンスをJSON.parse()でオブジェクトに変換し、必要なデータを抽出します。逆に、スプレッドシートに書き込む前にデータをJSON文字列に戻す場合はJSON.stringify()を使用します。これらの関数は標準のJavaScriptと同じ構文で呼び出せるため、既存のJS知識をそのまま活用できます。
JSON.parseとJSON.stringifyの使い方
JSON.parseは文字列をJavaScriptオブジェクトに変換する関数です。例えば、外部APIから返ってくる{ "name": "Alice", "age": 30 }という文字列をパースすると、オブジェクトとして扱えるようになります。JSON.stringifyはその逆で、オブジェクトを文字列に変換します。GASでの典型的なパターンは次のようになります。
var response = UrlFetchApp.fetch('https://api.example.com/data');
var json = JSON.parse(response.getContentText());
var name = json.name; // "Alice"
var payload = { id: 123, status: 'active' };
var body = JSON.stringify(payload);
var options = {
method: 'post',
contentType: 'application/json',
payload: body
};
UrlFetchApp.fetch('https://api.example.com/update', options);
パースとシリアライズを正しく行うことで、データの整合性を保ちながらAPIとのやり取りが可能になります。
APIレスポンスのパースとシリアライズ
実際の業務では、APIから取得したJSONレスポンスをスプレッドシートに書き込む前に、必要なフィールドだけを抽出して整形することが多いです。以下は、複数行のデータを取得し、スプレッドシートに書き込むサンプルです。
function writeData() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Data');
var response = UrlFetchApp.fetch('https://api.example.com/list');
var data = JSON.parse(response.getContentText()); // 例: [{id:1, name:'A'}, {id:2, name:'B'}]
var rows = data.map(function(item) {
return [item.id, item.name];
});
sheet.getRange(2, 1, rows.length, 2).setValues(rows);
}
このように、パースしたオブジェクトを配列に変換し、setValues()で一括書き込みすることで、処理速度を大幅に向上させることができます。
データ交換のフォーマット変換テクニック
JSONはデータ交換の標準フォーマットですが、時にはCSVやXMLに変換する必要があります。GASにはUtilities.parseCsv()やUtilities.formatString()など便利なユーティリティが用意されています。以下は、JSONをCSVに変換してスプレッドシートに貼り付ける例です。
function jsonToCsv() {
var json = [
{ id: 1, name: 'Alice', age: 30 },
{ id: 2, name: 'Bob', age: 25 }
];
var csv = Utilities.formatString('id,name,age\\n');
json.forEach(function(row) {
csv += Utilities.formatString('%s,%s,%s\\n', row.id, row.name, row.age);
});
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('CSV');
sheet.getRange(1, 1).setValue(csv);
}
逆に、CSVをJSONに変換する場合はUtilities.parseCsv()で配列化し、オブジェクトにマッピングします。こうしたフォーマット変換を組み合わせることで、GAS実践におけるデータ交換の幅が広がります。
コメント
コメントを投稿