Я использую 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», то он останется как есть.