APIから取得したデータはJSON形式であることが多く、そのままではスプレッドシートで扱いにくいものです。JSON.parseとJSON.stringifyを使えば、データを自在に変換してシートに書き込んだり、他のシステムに送信したりできます。この記事ではApps Scriptでこれらの関数を活用し、APIレスポンスを効率的に整形する方法を解説します。具体的なコード例とともに、よくあるエラーの対処法も紹介します。
【要点】Apps ScriptでJSON.parseとJSON.stringifyを使うための3つのポイント
- JSON.parse(文字列): JSON形式の文字列をJavaScriptオブジェクトに変換します。APIレスポンスの文字列をパースして、値を取り出せるようにします。
- JSON.stringify(オブジェクト): JavaScriptオブジェクトをJSON形式の文字列に変換します。シートのデータをAPIに送る際や、ログ出力に便利です。
- try…catch でエラーを捕捉: パースに失敗するとエラーが発生するため、try…catchで安全に処理します。
ADVERTISEMENT
目次
JSON.parseとJSON.stringifyの基本概念
JSONはデータ交換の標準フォーマットで、ほとんどのWeb APIがレスポンスとしてJSON文字列を返します。Apps Scriptでは、UrlFetchAppでAPIを呼び出した結果は文字列として取得されます。この文字列をそのままスプレッドシートに書き込んでも、セルに数値や日付として正しく格納できません。そこでJSON.parseを使ってJavaScriptオブジェクトに変換し、必要なプロパティにアクセスできるようにします。逆に、スプレッドシートのデータを他のAPIに送信するときは、オブジェクトをJSON.stringifyで文字列に変換してから送信します。これらの関数はJavaScriptの標準メソッドであり、Apps Scriptでもそのまま利用できます。
JSON.parseの基本手順
手順1: APIレスポンスを文字列として取得する
- UrlFetchApp.fetch でAPIを呼び出す
UrlFetchApp.fetch(URL) を使ってAPIからデータを取得します。戻り値はHTTPResponseオブジェクトです。 - getContentText で本文を文字列として取得する
HTTPResponseオブジェクトのgetContentText()メソッドで、レスポンスボディを文字列として取得します。 - JSON.parse でオブジェクトに変換する
取得した文字列をJSON.parse()に渡してJavaScriptオブジェクトに変換します。
例えば、次のように記述します。
function fetchData() {
var url = 'https://api.example.com/data';
var response = UrlFetchApp.fetch(url);
var jsonString = response.getContentText();
var data = JSON.parse(jsonString);
Logger.log(data);
}
このコードでは、APIから取得したJSON文字列をオブジェクトに変換し、ログに出力しています。data変数にはオブジェクトが代入されるため、data.key のようにプロパティにアクセスできます。
JSON.stringifyの基本手順
手順2: オブジェクトをJSON文字列に変換する
- 変換したいオブジェクトを用意する
スプレッドシートから取得したデータなどをオブジェクトとして準備します。 - JSON.stringify で文字列に変換する
JSON.stringify(オブジェクト) を実行すると、JSON形式の文字列が返ります。 - 文字列を送信または保存する
変換した文字列を別のAPIに送信したり、ログとして保存したりします。
具体例として、シートのデータをオブジェクトに変換してからJSON文字列にします。
function sheetToJson() {
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getDataRange();
var values = range.getValues();
var headers = values[0];
var jsonArray = [];
for (var i = 1; i < values.length; i++) {
var row = values[i];
var obj = {};
for (var j = 0; j < headers.length; j++) {
obj[headers[j]] = row[j];
}
jsonArray.push(obj);
}
var jsonString = JSON.stringify(jsonArray);
Logger.log(jsonString);
}
この関数は、シートの全データをJSON文字列に変換します。ヘッダー行をキーにしたオブジェクトの配列になり、JSON.stringifyで文字列化しています。
ADVERTISEMENT
APIレスポンスをシートに書き込む実践例
実際にAPIからデータを取得し、シートに書き込む例を示します。ここでは例として、JSONPlaceholderのサンプルAPIを使用します。
function importUsers() {
var url = 'https://jsonplaceholder.typicode.com/users';
var response = UrlFetchApp.fetch(url);
var jsonString = response.getContentText();
var users = JSON.parse(jsonString);
var sheet = SpreadsheetApp.getActiveSheet();
sheet.clear();
var headers = ['ID', 'Name', 'Username', 'Email'];
sheet.appendRow(headers);
users.forEach(function(user) {
var row = [user.id, user.name, user.username, user.email];
sheet.appendRow(row);
});
}
このコードでは、JSON.parseでユーザー配列を取得し、各ユーザーのプロパティをセルに書き込んでいます。appendRowで一行ずつ追加します。
よくあるエラーとその対処法
JSON.parseが失敗する原因と対策
JSON.parseは引数が正しいJSON形式でないとエラーになります。例えば、シングルクォートで囲まれていたり、末尾にカンマがある文字列はパースに失敗します。そのため、try…catchでエラーを処理することが重要です。
function safeParse(jsonString) {
try {
return JSON.parse(jsonString);
} catch (e) {
Logger.log('パースエラー: ' + e);
return null;
}
}
循環参照によるJSON.stringifyのエラー
オブジェクトが自分自身への参照を含む循環構造の場合、JSON.stringifyはエラーになります。これを避けるには、文字列化する前に循環参照を削除するか、replacer関数を使用します。
var obj = {};
obj.self = obj;
// 以下の行はエラーになる
// JSON.stringify(obj);
// 対策: 循環参照を除去する
文字列に改行や特殊文字が含まれる場合
APIレスポンスに改行コードやタブが含まれていると、JSON.parseがエラーになることがあります。事前に replace メソッドで特殊文字をエスケープするか、正しいJSONであることを確認します。
var cleanString = jsonString.replace(/[\n\t]/g, ' '); var data = JSON.parse(cleanString);
JSON.parseとJSON.stringifyの比較
| 関数 | 入力 | 出力 | 主な用途 |
|---|---|---|---|
| JSON.parse | JSON形式の文字列 | JavaScriptオブジェクト、配列、またはプリミティブ値 | APIレスポンスのパース、外部データの読み込み |
| JSON.stringify | JavaScriptオブジェクト、配列、またはプリミティブ値 | JSON形式の文字列 | データのシリアライズ、API送信、ログ出力 |
上記の表から、両者は逆の変換を行っていることがわかります。適切に使い分けることで、Apps Script内でのデータ変換がスムーズになります。
まとめ
この記事では、Apps ScriptにおけるJSON.parseとJSON.stringifyの基本的な使い方と実践例を解説しました。JSON.parseでAPIレスポンスをオブジェクトに変換し、シートに書き込む流れを習得できたはずです。また、JSON.stringifyでシートのデータをJSON文字列に変換する方法も紹介しました。これらの関数を使いこなすことで、外部APIとの連携が格段に楽になります。次は、UrlFetchAppの詳細なオプションやOAuth認証について学んでみると良いでしょう。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】数値の連続データを自動入力!オートフィルの活用
- 【Googleスプレッドシート】ダークモードを有効にする!目に優しい配色への切替
- 【Googleスプレッドシート】株価APIで株式データを自動取得!GOOGLEFINANCE超え活用
- 【Googleスプレッドシート】共有相手が編集できない時のチェック!権限と許可状態の確認
- 【Googleスプレッドシート】ページ設定で用紙サイズと向きを調整!印刷レイアウトの基本
- 【Googleスプレッドシート】Excelファイルxlsxをインポートする手順!ドラッグ&ドロップで取り込み
- 【Googleスプレッドシート】条件付き書式をコピーする!書式のみペーストの活用
