実現したいこと
最終的にやりたいことは、APIで取得したデータをスプレッドシートに入力することなのですが、その段階にたどり着く前に躓いています。
現時点で疑問に思っていることを解決したいです。
前提
最近GASを使い始めた者です。これまでプログラミングの業務経験、学習経験はなく、HTML、CSSの知識が多少ある程度です。ここで質問ができるレベルの知識すら持ち合わせていないように思いますが、全く前に進めなくなってしまったので質問させていただきました。
GASを使いAPIで取得したデータを扱う方法がわかりません。
最終的にやりたいことは、APIで取得したデータをスプレッドシートに入力することなのですが、その段階にたどり着く前に躓いています。
APIを利用してデータを取得するため以下のようなコードを、スプレッドシートに紐づくコンテナバインドスクリプトとして作成しました。
var ApiUrl = 'https://apiurl' var res = UrlFetchApp.fetch(ApiUrl).getContentText(); var res_json = JSON.parse(res); console.log(res_json);
この時点で,console.logで以下のような形式のデータが取得できていることが確認できました。
{ request: { parameters: { api_id: 'apiid', username: 'USERNAME', email: 'xyz@example.jp', output: 'json' } }, result: { status: 200, result_count: 1, items: [ [Object] ] } }
ここから先ほどのコードに追記して
var ApiUrl = 'https://apiurl' var res = UrlFetchApp.fetch(ApiUrl).getContentText(); var res_json = JSON.parse(res); var res_json_result1 = res_json.result; console.log(res_json_result1);
この時点で出力されるログが
{ status: 200, result_count: 1, items: [ { p_code: 'xxx', p_name: '', username: 'USERNAME', email: 'xyz@example.jp', date: [Object], iteminfo: [Object] } ] }
コードをさらに進めて
var ApiUrl = 'https://apiurl' var res = UrlFetchApp.fetch(ApiUrl).getContentText(); var res_json = JSON.parse(res); var res_json_result1 = res_json.result; var res_json_result2 = res_json_result1.items; console.log(response_json_result2);
ここで出力されるログは以下のような形式でした。
[ { p_code: 'xxx', p_name: '', username: 'USERNAME', email: 'xyz@example.jp', date: { start: '2022-11-5', finish: '2022-11-11' } iteminfo: { data1: [Object], data2: [Object], data3: [Object], data4: [Object], data5: [Object] } } ]
このように、1段階ずつ掘り進めれば全てのデータに辿り着けるのではと思い、コードを以下のように記述しました。
var ApiUrl = 'https://apiurl' var res = UrlFetchApp.fetch(ApiUrl).getContentText(); var res_json = JSON.parse(res); var res_json_result1 = res_json.result; var res_json_result2 = res_json_result1.items; var res_json_result3 = res_json_result2.iteminfo; console.log(res_json_result3);
すると、ログがundefinedとなってしまいました。
試したこと
console.log(res_json_result1.status)
→200と返ってきます。
console.log(res_json_result2.username)
→undefinedと返ってきます。
res_json_result1.itemsが正しく取得できたのにres_json_result2.iteminfoがundefinedになり、データ形式がitems[]だったのに対しiteminfo{}だったため、もしかしてデータが{}で囲われてるとundefinedになって[]ならいけるのでは?と思い(その前に取得できていたres_json.result;はresult{}だったので関係なさそうだとは思いましたが、、)
console.log(response_json_result2);
の結果返ってきた
[ { p_code: 'xxx', p_name: '', username: 'USERNAME', email: 'xyz@example.jp', date: { start: '2022-11-5', finish: '2022-11-11' } iteminfo: { data1: [Object], data2: [Object], data3: [Object], data4: [Object], data5: [Object] } } ]
上記のデータを
p_code: 'xxx', p_name: '', username: 'USERNAME', email: 'xyz@example.jp', date: [ start: '2022-11-5', finish: '2022-11-11' ] iteminfo: [ data1: [Object], data2: [Object], data3: [Object], data4: [Object], data5: [Object] ]
このような形に変換しようと思い
response_json_result2b = response_json_result2.replace("[{" , "");
このようにしたところ
TypeError: response_json_result2.replace is not a function
とエラーになってしまいました。
まとめると、わからないのは
-
res_json_result1.items;まではデータが正しく取得できるのにres_json_result2.iteminfo;でundefinedになるのはなぜなのか
-
replaceできなかったのはなぜなのか
-
正しくデータを取得するにはどうしたらいいのか
です。
正しく質問できているかわからないのですが、ご教示いただけると幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2023/04/21 05:07
2023/04/21 05:25
2023/04/21 06:09