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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

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

JSON

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

2回答

349閲覧

配列内の配列のn番目の値の取得

pepe4422

総合スコア5

Google Apps Script

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

JSON

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2022/10/07 11:54

前提

GoogleAppsScriptを使用して某サービスとAPI連携し、GoogleスプレッドシートにAPIで取得した値を出力するアプリを作っています。
こちらでご教授いただいたコードを用いて、色々試行しております。

実現したいこと

取得したJSON配列から、、

  • project_id
  • project_name
  • custom内のdef_id":1のdef_value
  • custom内のdef_id":5のdef_value

を取得し、スプレッドシートのセルに出力したいです。

"data": [
{
"project_id": 1,
"project_name": "aaaaaaa",
"custom": [
{
"def_id": 1,
"def_value": "XXXXXX"
},
{
"def_id": 5,
"def_value": "ZZZZZZZ"
},
]
}
]

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

ソースコードではproject_id、project_name、custom内のdef_id": 1のdef_valueの値しか出力されません。

該当のソースコード

GoogleAppsScript

1{ 2 const sheet_id = 'xxx'; 3 const sheet_name = 'xxx'; 4 const sheet = SpreadsheetApp.openById(sheet_id).getSheetByName(sheet_name); 5 const response = UrlFetchApp.fetch("xxx", { 6 "method": "GET", 7 "headers": { 8 "content-type": "application/json", 9 "Api-Key": "xxx" 10 }, 11 }) 12 const json = JSON.parse(response); 13 const rows = json.data.map(({ 14 project_id: A, 15 project_name: B, 16 custom: [{ def_value: C}], 17}) => [A, B, C]); 18 console.log(rows); 19 const startRow = sheet.getLastRow() + 1; 20 const rowLength = rows.length; 21 const colLength = rows[0].length; 22 var date = new Date(); 23 sheet.getRange(1, 1).setValue(date); 24 sheet.getRange(startRow, 2, rowLength, colLength).setValues(rows); 25}

試したこと

custom: [{ def_value: C}],の部分を、、

custom: [{ def_value.0: C, def_value.1: D}],
custom: [{ def_value(0): C, def_value(1): D}],

など試してみましたが、そもそもこのような書き方では取得できないのでしょうか?
ご教授いただけますと幸いです。。。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

qnoir様

ご回答ありがとうございます、おかげさまでアプリが完成しました!
大変助かりました、ありがとうございました。

投稿2022/10/09 16:26

pepe4422

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

「def_valueが 1または5のものだけ抽出」というようなことをしたい場合、下記ではいかがでしょうか。

js

1const json = {"data": [ 2 { 3 "project_id": 1, 4 "project_name": "aaaaaaa", 5 "custom": [ 6 { 7 "def_id": 1, 8 "def_value": "AAAAA" 9 }, 10 { 11 "def_id": 2, 12 "def_value": "BBBBB" 13 }, 14 { 15 "def_id": 3, 16 "def_value": "CCCCC" 17 }, 18 { 19 "def_id": 4, 20 "def_value": "DDDDD" 21 }, 22 { 23 "def_id": 5, 24 "def_value": "EEEEE" 25 }, 26 ] 27 } 28]} 29 30const rows = json.data.map(({ 31 project_id: A, 32 project_name: B, 33 custom: C, 34}) => [A, B, ...C.filter(v => (v.def_id === 1 || v.def_id === 5)).map(v =>v.def_value)]); 35console.log(rows);

出力結果

[[1, "aaaaaaa", "AAAAA", "EEEEE"]]

投稿2022/10/08 10:07

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問