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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Google Apps Script

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

JavaScript

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

Q&A

解決済

1回答

1662閲覧

FireBase_RealtimeDataBaseの情報をGoogleSpreadSheet(GSS)に自動で入力したい

Raliemon

総合スコア12

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Google Apps Script

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

JavaScript

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

0グッド

0クリップ

投稿2019/05/30 06:08

編集2019/05/31 09:35

#目的:
FireBase_RealtimeDataBaseの情報をGoogle App Script(GAS)使ってGoogleSpreadSheet(GSS)に自動で記入したい。

#問題:
FireBaseからデータは取ってこれるのですが、 取ってきたJsonファイルをJSON.parseする際にエラーがでる。

#お聞きしたいこと:
上記の解消方法

#現状のコード:

GAS

1Code.gs 2 3function getData() { 4 var ss = SpreadsheetApp.getActiveSpreadsheet(); 5 var sheet = ss.getSheetByName('FireBase'); 6 var range = sheet.getRange(1, 1, 1, 3); //ここのデータ量に伴い変化させるつもりです。 7 var data = getFirebaseData("0");//引き出すデータのディレクトリ名を指定 8 Logger.log(data) 9 var json = JSON.parse(data) 10 Logger.log(json) 11 range.setValues(json); 12} 13 14function getFirebaseData(data){ 15 var firebaseUrl = "自分のFireBaseURL"; 16 var secret = "自分のSecret"; 17 var base = FirebaseApp.getDatabaseByUrl(firebaseUrl, secret); 18 var result = base.getData(data); 19 return result; 20}

#エラーコード
SyntaxError: Expected end of stream at char 1 (line 7, file "Code")
JSON.parseの部分で上記エラーがでます。

#ログ(Logerの一つ目)
[~~~ JST] {test=false}

#FireBaseのRealtimeDBの中身
ディレクトリ"0"の子階層

test:false

ちなみに下記にしても同様のエラーがでました。
{test=string} valueをstring
{test=1} valueを1

#参照にしたサイト
一部ですが、参照したものを記載いたします。
https://www.youtube.com/watch?v=MdRLezi88fw
https://stackoverflow.com/questions/39194941/write-from-google-firebase-to-google-sheets-using-google-apps-script

よろしくお願いいたします。

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

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

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

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

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

xenbeat

2019/05/30 06:45

RealtimeDBにはどのようにデータが入っていて、GASの「Logger.log(data)」ではどのようなデータが返ってきてるのでしょうか。それらがわかるように質問本文に追記ください。
Raliemon

2019/05/30 07:09

早速ありがとうございます。 いただいた内容を本文に反映いたしました。 DBの中身をお見せできないため、具体例でいれましたが、もしご指摘の意図と異なるようであればご指摘いただけますと幸いです。
macaron_xxx

2019/05/30 07:39

そのエラーはdataの中身がなんか変だぜ ってエラーなので、伏せるところは伏せながらできるだけ正確に記載いただかないと、なんとも解決できないと思います。
xenbeat

2019/05/30 16:44 編集

> "引き出すデータのディレクトリ名"の子階層に全てのデータが入っています。 念のため確認です。 "引き出すデータのディレクトリ名"を単純にJSONエクスポートすると以下のようになるってことですかね。 { "データ1" : 10, "データ2" : true, "データ3" : "あいうえお", "データ4" : 100 } > 2.上記を通過したあと、データに合わせて入力先のsheetも拡大縮小できるようにしたい これは全く別問題かつ丸投げに近いので、本質問から除外いただけますでしょうか。 https://teratail.com/help/avoid-asking 今回のエラーが解決した後にご自身でやってみて、どうしてもわからなかった時に新規でご質問いただけますか。
Raliemon

2019/05/31 09:30

上記について質問を一つ取り下げました。大変失礼いたしました。 またデータについても簡素化したところ、同じようにエラーがでました。 Firebaseをエクスポートして、下記のサイトだとcsvに変換できたので、jsonファイルが壊れているということはないように思うのですが、この先どうすればいいのかわからず止まっています。 https://json-csv.com/ ご回答いただけますと幸いです。
guest

回答1

0

ベストアンサー

おそらくですが base.getData(data) でパース後の object が返ってきているのではないかと思います。
なので自身で JSON.parse せずに、例えば次のようにすれば表示用のデータが参照できるかと思います。

var json = JSON.parse(data) Logger.log(json)

for(var i in data) { Logger.log(data[i]); }

投稿2019/06/01 00:30

xenbeat

総合スコア4258

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

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

Raliemon

2019/06/01 04:46

上記の形を利用することで元の形のデータも引き出せるようになりました。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問