Как я могу получить строковый литерал (массив символов?) Из значения в JavaScript? - PullRequest
0 голосов
/ 30 мая 2019

Я использую Google App Script, чтобы получить текст из Google Sheet, а затем загрузить его в Firebase. JSON-кодирование любых данных с листа добавляет дополнительные escape-символы, которые мне не нужны. Я пытаюсь найти способ предотвратить это, потому что он не добавляет ненужных escape-символов, если я использую строковый литерал.

Эта функция, приведенная ниже, - это то, что я называю для синхронизации данных с листа в базу данных. Я инициализирую объект из собранных данных, а затем отправляю его в базу данных Firebase для обновления.

Если я оставлю это как есть, строка в data[i][1] в конечном итоге автоматически добавит escape-символы. Если я заменю data[i][1] любой литеральной строкой (т.е. "Testing\n\n-Caleb"), значение этого ключа сохранит всю строку ун-модифицированный.

// Gets the data from the sheet and puts it in an object.
// It is called by running the sync button in the sheet.
function sync() {
  // get the spreadsheet data
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("main");
  var [rows, columns] = [sheet.getLastRow(), sheet.getLastColumn()];
  var data = sheet.getSheetValues(1, 1, rows, columns);

  // put the data in an object
  testAlert(data[1][1]);   // prints "Testing
                           //        
                           //         -Caleb"                   (OK)
  var obj = {}
  for (var i = 1; i < data.length; i++) {
    obj[i - 1] = {
      Happy: data[i][0],
      Meh: data[i][1],             // THE VALUE OF TOPIC
    //Meh: "Testing\n\n-Caleb"     // THE LITERAL STRING OPTION
      Down: data[i][2],
      Sad: data[i][3],
      Angry: data[i][4]
    }
  }
  testAlert(obj[0].Meh).   // prints "Testing
                           //        
                           //         -Caleb"                   (OK)

  // convert to unused JSON object to print to the window what is happening
  var jsonOBJ = JSON.stringify(obj[0].Meh)
  testAlert(jsonOBJ).      // prints "\"Testing\\n\\n-Caleb\"" (ERROR)

  updateFirebaseData(obj, "emotions");
}

Эта функция вызывается в конце:

// updates the firebase database with specified data and location
function updateFirebaseData(obj, loc) {
  var firebaseUrl = "https://gem-0-2.firebaseio.com/";
  var secret = "FirebaseSecret";
  var base = FirebaseApp.getDatabaseByUrl(firebaseUrl, secret);
  var result = base.updateData(loc, obj);
}

Данные в data[i][1] - это «Тестирование \ n \ n-Калеба», и к тому времени, когда они достигают базы данных, это «\» Тестирование \ n \ n-Калеба \ "», и таким образом экранируются символы, которые я намеренно места, как и в конце строки, не переведены должным образом. Однако, если я добавлю «Testing \ n \ n-Caleb» в качестве значения для «Meh», то он останется как есть.

1 Ответ

0 голосов
/ 31 мая 2019

sheet.getSheetValues() возвращает строку, которая уже закодирована как JSON. Если вы хотите сохранить фактическую строку, вам нужно расшифровать ее с помощью JSON.parse().

  for (var i = 1; i < data.length; i++) {
    obj[i - 1] = {
      Happy: data[i][0],
      Meh: JSON.parse(data[i][1]),             // THE VALUE OF TOPIC
      Down: data[i][2],
      Sad: data[i][3],
      Angry: data[i][4]
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...