Как отправить иерархические данные из Firebase на листе Google - PullRequest
1 голос
/ 27 мая 2019

ниже - иерархия моих данных в базе данных firebase. Я хочу отправить эти данные на страницу Google, но я не могу этого сделать.

enter image description here

Ошибка, указанная в листе Google: «TypeError: Не удается прочитать свойство» rytf1JLXetTIINjHNku0yAvs7su2 "из undefined. Подробности "

Ниже приведен код, который я пытаюсь получить данные. Пожалуйста, дайте мне знать ошибку. Спасибо!

function writeSheets() {
    var ss = SpreadsheetApp.openById("google-sheet-id");
    var firebaseUrl = "database-url";
    var base = FirebaseApp.getDatabaseByUrl(firebaseUrl);
    var data = base.getData('users/admin');

    Logger.log(data);
    var num = 2;
    range = ss.getRange("A" + num + ":E" + num + "");
    for (var i in data) {
        var values = [
            [
                [
                    [data][data][i] // Error occurs here 
                ].email, [
                    [data][data][i] // Error occurs here 
                ].userName, [
                    [data][data] // Error occurs here 
                    [i]
                ].Password, [
                    [data][data][i]  // Error occurs here 
                ].loginState, [
                    [data][data][i]  // Error occurs here 
                ].uid
            ]
        ];
        range.setValues(values);
        num += 1;
        range = ss.getRange("A" + num + ":E" + num + "");
    }

}

Пример значения данных

{
   rytf1JLXetTIINjHNku0yAvs7su2:
      {
        loginDetail: 
            {
              uid:rytf1JLXetTIINjHNku0yAvs7su2,
              password:123456,
              loginState:true, 
              userName:John,
              email:a@a.com
        }
      }
    }

1 Ответ

1 голос
/ 28 мая 2019

Исходя из вашего вопроса и комментариев, я подумал, что вы хотите сделать следующее:

  • Вы хотите поместить значения "email", "userName", "password", "loginState", "uid" в таблицу в каждой строке.
  • Вы хотите поместить значение из 2-й строки 1-го листа в электронную таблицу.
  • Структура объекта data выглядит следующим образом.Вы хотите извлечь каждое значение из объекта loginDetail.

    {
      "rytf1JLXetTIINjHNku0yAvs7su2": {
        "loginDetail": {
          "uid": "rytf1JLXetTIINjHNku0yAvs7su2",
          "password": 123456,
          "loginState": true,
          "userName": "John",
          "email": "a@a.com"
        }
      }
    };
    

Если мое понимание верно, как насчет этой модификации?

Точки модификации:

  • Найдите loginDetail на 2-м уровне, и объект loginDetail извлечен.
  • Из найденного объекта loginDetail каждое значение "email", "userName", "password", "loginState", "uid" извлекается в порядке.
  • Значения "email", "userName", "password", "loginState", "uid" выводятся из 2-го ряда 1-го листа электронной таблицы.

Модифицированный скрипт:

function writeSheets() {
  var ss = SpreadsheetApp.openById("google-sheet-id");
  var firebaseUrl = "database-url";
  var base = FirebaseApp.getDatabaseByUrl(firebaseUrl);
  var data = base.getData('users/admin');

  Logger.log(data);

  // I modified below script.
  var keys = ["email", "userName", "password", "loginState", "uid"];
  var res = [];
  for (var i in data) {
    for (var j in data[i]) {
      if (j == "loginDetail") {
        res.push(keys.map(function(e) {return data[i][j][e]}));
      }
    }
  }
  var num = 2;
  ss.getRange("A" + num + ":E" + (res.length + num - 1)).setValues(res);
}

Примечание:

  • Если структура объекта data изменена, необходимо пройти объект.В это время, пожалуйста, скажите мне.

Ссылка:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...