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

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

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

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

HttpWebRequest

HttpWebRequestとは.NETにおけるクラスであり、WebRequestクラスをHTTPに導入するものです。

JSON

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

API

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

Q&A

解決済

1回答

1998閲覧

JSON.parse()後のオブジェクトを使用すると「TypeError: members is not iterable」でエラーになる

donut4

総合スコア148

Google Apps Script

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

HttpWebRequest

HttpWebRequestとは.NETにおけるクラスであり、WebRequestクラスをHTTPに導入するものです。

JSON

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

API

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

0グッド

1クリップ

投稿2022/03/16 04:45

編集2022/03/16 04:46

javascript、の文法、作法についての質問です。
下記のようなAPIからの返答をJSONのparseで整えようとするとforの時にエラーになります。

**「JSON.parse(response).members;」**のように
parse後のオブジェクトに対して.membersをするとエラーにならないのですが、
.membersは一体何をしているのでしょうか?

gs

1 const token= "Slack_Bot_Token"; 2 const options = { 3 "method" : "get", 4 "payload" : { 5 "token": token, 6 } 7 }; 8 9 const url = "https://slack.com/api/users.list"; 10 const response = UrlFetchApp.fetch(url, options); 11 12 const members = JSON.parse(response);    ←forで「TypeError: members is not iterable」エラーになる 13 //const members = JSON.parse(response).members; ←後ろに.membersをつけるとエラーが出ない。 14 15 16 for (var member of members) { 17 ... 18 }

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

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

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

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

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

maisumakun

2022/03/16 04:46

responseの中身はどのような構造なのでしょうか?
guest

回答1

0

ベストアンサー

https://api.slack.com/methods/users.list
コード内のURL的にこちらですよね?

JSON

1{ 2 "ok": true, 3 "members": [ { 4 "id": "W012A3CDE", 5 "team_id": "T012AB3C4", 6 "name": "spengler", 7 "deleted": false, 8 "color": "9f69e7", 9 "real_name": "spengler", 10 "tz": "America/Los_Angeles", 11 "tz_label": "Pacific Daylight Time", 12 "tz_offset": -25200, 13 "profile": { 14 "avatar_hash": "ge3b51ca72de", 15 "status_text": "Print is dead", 16 "status_emoji": ":books:", 17 "real_name": "Egon Spengler", 18 "display_name": "spengler", 19 "real_name_normalized": "Egon Spengler", 20 "display_name_normalized": "spengler", 21 "email": "spengler@ghostbusters.example.com", 22 "image_24": "https://.../avatar/e3b51ca72dee4ef87916ae2b9240df50.jpg", 23 "image_32": "https://.../avatar/e3b51ca72dee4ef87916ae2b9240df50.jpg", 24 "image_48": "https://.../avatar/e3b51ca72dee4ef87916ae2b9240df50.jpg", 25 "image_72": "https://.../avatar/e3b51ca72dee4ef87916ae2b9240df50.jpg", 26 "image_192": "https://.../avatar/e3b51ca72dee4ef87916ae2b9240df50.jpg", 27 "image_512": "https://.../avatar/e3b51ca72dee4ef87916ae2b9240df50.jpg", 28 "team": "T012AB3C4" 29 }, 30 "is_admin": true, 31 "is_owner": false, 32 "is_primary_owner": false, 33 "is_restricted": false, 34 "is_ultra_restricted": false, 35 "is_bot": false, 36 "updated": 1502138686, 37 "is_app_user": false, 38 "has_2fa": false 39 } ], 40 "cache_ts": 1498777272, 41 "response_metadata": { 42 "next_cursor": "dXNlcjpVMEc5V0ZYTlo=" 43 } 44}

構造的にこうなっているので、JSON.parse(response)の結果は連想配列のはずです。
ここからkeyが[member]の要素を取り出す必要があります。
この[member]に格納されている要素は、userの一覧が格納されている配列です。

//const members = JSON.parse(response).members; ←後ろに.membersをつけるとエラーが出ない。

なので、これで正しいと思います。

投稿2022/03/16 04:53

編集2022/03/16 04:54
PlugOut777

総合スコア917

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

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

donut4

2022/03/16 06:20

回答ありがとうございます。 >> コード内のURL的にこちらですよね? はい、そちらのAPIを使用してます。 もしかして、JSON.parse(response).members; の .members の部分は JSON.parse(response) の結果の中にある"members"キーに対する値を取り出す為に付与しているのでしょうか?
PlugOut777

2022/03/16 06:52 編集

はい、そうです。 JSON.parse(response)で得られる連想配列(オブジェクト)は、APIから返却されたJSONをパースしたものです。 let data = JSON.parse(response) 上記のようにするのがわかりやすいでしょうか。 data.members或いはdata['members']でも取り出せます。 もちろん、JSON.parse(response).membersでもJSON.parse(response)['members']でも良いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問