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

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

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

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Google スプレッドシート

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

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

JSON

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

Q&A

解決済

1回答

770閲覧

GoogleSheetsAPIで取得したJSONをNuxt.jsで読み込む形式にしたい

TENTO

総合スコア9

Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Google スプレッドシート

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

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

JSON

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

0グッド

0クリップ

投稿2022/03/31 11:13

編集2022/03/31 11:20

前提

Nuxt.js で JSON ファイルを読み込んで v-for で展開するのに
スプレッドシート

Google Cloud Platform

json

Nuxt.js
の流れで進めております。

実現したいこと

取得したjsonをNuxt.jsで読み込める形式に変更したいのです。

該当のソースコード

● Google Cloud Platformで
スプレッドシートのjsonを取得すると、
下記のような配列で表示されます。

{ "range": "'sheet01'!A1:B1", "majorDimension": "ROWS", "values": [ [ "Time", "Title", "Day01", "Number01" ], [ "2022/03/27 9:00:00", "001", "27", "0001" ], [ "2022/03/28 10:00:00", "002", "28", "0002" ], [ "2022/03/29 11:00:00", "003", "29", "0003" ] ] }

変更したい形式

● このデータを下記のような
Nuxt.jsで読み込める形式に変更したいのです。

[ { "Time":"2022/03/27 9:00:00", "Title":"001", "Day01":"27", "Number01":"0001" }, { "Time":"2022/03/28 10:00:00", "Title":"002", "Day01":"28", "Number01":"0002" }, { "Time":"2022/03/29 11:00:00", "Title":"003", "Day01":"29", "Number01":"0003" }, ]

現在の設定

現在は下記のようなNuxtの設定でjsonを読み込んでおります。

<script> export default { async asyncData({ $axios }) { // 取得先のURL const url = "https://sheets.googleapis.com/v4/spreadsheets/xxxxxxxxxx/values/xxxxxx?key=xxxxxx"; // リクエスト(Get) const response = await $axios.$get(url); // 配列で返ってくるのでJSONにして返却 return { items: response }; }, data() { return { items: [], sort: { key: 'id', isAsc: true } } }, computed: { result: function () { let list = this.items.slice(); return list; } } } </script>

わかりにくい部分もあるかもしれませんが、
何卒!ご教授を。よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんな感じでしょうか。

js

1function convertResponse(json) { 2 const keys = json.values[0]; 3 const array = []; 4 for (let i = 1; i < json.values.length; i++) { 5 array.push(keysAndValues(keys, json.values[i])); 6 } 7 return array; 8} 9 10function keysAndValues(keys, vals) { 11 const obj = {}; 12 for (let i = 0; i < keys.length; i++) { 13 obj[keys[i]] = vals[i]; 14 } 15 return obj; 16} 17 18const json = JSON.parse(` 19{ 20 "range": "'sheet01'!A1:B1", 21 "majorDimension": "ROWS", 22 "values": [ 23 [ 24 "Time", 25 "Title", 26 "Day01", 27 "Number01" 28 ], 29 [ 30 "2022/03/27 9:00:00", 31 "001", 32 "27", 33 "0001" 34 ], 35 [ 36 "2022/03/28 10:00:00", 37 "002", 38 "28", 39 "0002" 40 ], 41 [ 42 "2022/03/29 11:00:00", 43 "003", 44 "29", 45 "0003" 46 ] 47 ] 48} 49`); 50 51const items = convertResponse(json); 52console.log(items); 53 54/* 結果は 55[ 56 { 57 Time: '2022/03/27 9:00:00', 58 Title: '001', 59 Day01: '27', 60 Number01: '0001' 61 }, 62 { 63 Time: '2022/03/28 10:00:00', 64 Title: '002', 65 Day01: '28', 66 Number01: '0002' 67 }, 68 { 69 Time: '2022/03/29 11:00:00', 70 Title: '003', 71 Day01: '29', 72 Number01: '0003' 73 } 74] 75*/

無理やり 1 行で書くとこうなります。

js

1const items = json.values.slice(1).map(vals => json.values[0].reduce((obj, key, i) => ({ ...obj, [key]: vals[i] }), {}));

投稿2022/03/31 12:27

hoshi-takanori

総合スコア7895

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

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

TENTO

2022/03/31 13:19

早速の回答、ありがとうございます! 自分の知識不足で、Nuxtへの取り入れ方がわかりませんでしたが、 JSON.parse() を利用するということですね。  いただいたソースを元に挑戦してみます! 本当にありがとうございます。
hoshi-takanori

2022/03/31 14:04

convertResponse と keysAndValues の 2 つの関数を組み込んで、API の結果を convertResponse で変換すれば良いはず。 // 配列で返ってくるのでJSONにして返却 return { items: convertResponse(response) }; JSON.parse は文字列からテストデータに変換するために使ってるだけで、実際に API を叩く場合は axios がやってくれます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問