スキップしてメイン コンテンツに移動

GASでJSONレスポンス変換

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実践におけるデータ交換の幅が広がります。

この記事はAIによって作成されました。

コメント