質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

解決済

階層化されたJSON形式の情報をGoogleAppsScriptでGoogleスプレッドシートへ出力したい

pepe4422
pepe4422

総合スコア5

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

2回答

0リアクション

1クリップ

427閲覧

投稿2022/10/03 10:19

前提

GoogleAppsScriptでウェブサービスからAPIで情報を取得し、随時Googleスプレッドシートへ出力するアプリケーションを作っています。
本日こちらで質問させていただき、スプレッドシートへの出力は行えたのですが、考慮不足が判明したため、改めて質問させていただきます。

実現したいこと

下記の通りJSON形式で取得した階層化されたデータをGoogleスプレッドシートへproject_idごとに1行に出力したい。
考慮不足であった点は、取得したJSONの配列が階層化されているケースがあることです。
階層化されている情報もスプレッドシートへ出力したく、配列をフラット化する?という下記記事を参考に色々と試行しておりますが、うまく取得することができずどうしたものかと困っております。。。

参考にしているページhttps://codelife.cafe/entry/GAS-JSON-to-SpreadSheet

これを、、、

"data": [
{
"project_id": 1,
"project_name": "XXX",
"custom": [
{
"def_id": 10,
"def_value": "XXXXXX"
}
],
{
"project_id": 2,
"project_name": "ZZZ",
"custom": [
{
"def_id": 20,
"def_value": "ZZZZZZ"
}
],

こうしたい、、、

  A  B  C  D
1 1 XXX  10 XXXXXX
2 2 ZZZ  20 ZZZZZZ
3

発生している問題・エラーメッセージ

「ReferenceError: flattenObj is not defined(行 16」と表示され、処理が止まってしまいます。

該当のソースコード

GoogleAppsScript

const sheet_id = 'xxxxxx'; const sheet_name = 'test'; const sheet = SpreadsheetApp.openById(sheet_id).getSheetByName(sheet_name); sheet.getRange("A2:T1000").clearContent(); const response = UrlFetchApp.fetch("https://api.xxxxxx.com/v1.1/projects?limit=10", { "method": "GET", "headers": { "content-type": "application/json", "Api-Key": "xxxxxxx" }, }) const json = JSON.parse(response); // 配列内のObjectをフラット化 const flatJson = json.data.map((e) => flattenObj(e)); // 1つ目の配列のkeyをヘッダーとして定義 const headers = Object.data(flatJson[0]); // headers をループして生成した配列を body 配列にまとめる const body = flatJson.map((row) => { return headers.map((data) => row[data] || "");s }); // headers と body を結合 const table = [headers].concat(body); // setValues sheet.getRange(1, 1, table.length, table[0].length).setValues(table); // シートに出力したいデータだけを抜き出して、2次元配列を生成 const output = json.data.map(obj => [obj.project_id, obj.project_name, obj.custom.def_id, obj.custom.def_value]); // getRange()で使用する値を設定 const startRow = sheet.getLastRow() + 1; const rowLength = output.length; const colLength = output[0].length; // シートの指定した範囲に、outputを出力する // getRange(開始行番号, 開始列番号, 行数, 列数) sheet.getRange(startRow, 1, rowLength, colLength).setValues(output);

フラット化しての取得にこだわりがあるわけではありませんので、他に良い方法がありましたらどうかご教授の程、お願いいたします。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

Cocode

2022/10/03 10:49

今示されているJSON内容の例ですと、そんなに難しいことしなくても、私が前回の質問でお送りしたコードのうち.mapの部分をほんの少し書き換えるだけでできますよー! またはcustomの配列[]の中のオブジェクト{}の数が増減するということですか?
pepe4422

2022/10/03 11:02

Cocode様 今回もご回答ありがとうございます! 難しく考えすぎてしまいましたかね、、またご教授いただけますと助かります。。。 >またはcustomの配列[]の中のオブジェクト{}の数が増減するということですか? →いいえ、customの配列[]の中のオブジェクトの数は変動いたしません。」 よろしくお願いいたします。
Cocode

2022/10/03 11:04

お返事ありがとうございます! 回答に投稿します〜!スマホからなのであまり長文打てませんがすみません。。。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。