Скрипт Google Apps JSON не может быть проанализирован на стороне клиента

#json #object #google-apps-script

Вопрос:

У меня возникли проблемы с анализом данных JSON в сценарии приложений. На моей клиентской стороне HTML я зацикливаю данные, которые я извлек, чтобы создать несколько разделов. У меня есть функция «toggleVideo» на стороне моего клиента, которая предназначена для регистрации сохраненного атрибута «данные».

HTML:

 <? for (let i =0; i<videos.length; i  ){ ?>
<div onClick="toggleVideo(this)" data='<?!= JSON.stringify(videos[i])  ?>' class="col video-preview-container">
    <div class="video-preview-image" style="background-image: url(<?= videos[i].preview_url ?>);"></div>
    <div class="video-preview-title-speaker-container">
        <div class="video-preview-title"><?= videos[i].title ?></div>
        <div class="video-preview-speaker"><?= videos[i].speaker ?></div>
    </div>
</div>
<? } ?>
 

Функция toggleVideo для получения данных, хранящихся в div:

 function toggleVideo(param) {
    var videoData = param.getAttribute("data");
    var videoDataParsed = `'${videoData}'`;
    videoDataParsed.replace(/\n/g, "\n")
        .replace(/\'/g, "\'")
        .replace(/\"/g, '\"')
        .replace(/\amp;/g, "\amp;")
        .replace(/\r/g, "\r")
        .replace(/\t/g, "\t")
        .replace(/\b/g, "\b")
        .replace(/\f/g, "\f");
    console.log(JSON.parse(videoDataParsed));
}
 

Когда я утешаю.регистрируйте данные, когда они не анализируются, никаких проблем вообще нет, он возвращает мне строку с данными. Я попытался использовать JSON.parse() в консоли браузера, добавив » до и после {}», и он отлично проанализировал и вернул объект. Но когда я добавляю, я пытаюсь проанализировать его в функции toggleVideo, она возвращает следующую ошибку:

VM38:1 Неперехваченная синтаксическая ошибка: Неожиданный токен ‘ в JSON в позиции 0 в JSON.parse () в toggleVideo (панель управления:30) в HTMLDivElement.onclick (панель управления:1)

Я попытался добавить замену(/…и т.д.), Чтобы избавиться от любых невидимых символов, но это все равно не работает. Кто-нибудь знает, в чем может быть проблема?

Комментарии:

1. Что должна делать эта линия? var videoDataParsed = `'${videoData}'`; ? Если вы преобразуете его в строку, попробуйте JSON.stringify(videoData)

2. Спасибо за ваш ответ! О боже, теперь это работает и без него. Я была такой глупой! Очень признателен!

3. Добро пожаловать! Я сейчас напишу правильный ответ, пожалуйста, утвердите его 😉

Ответ №1:

Ошибка, которую вы получаете, означает, что JSON.parse() вам не нравится тип данных, который он видит, что означает, что вы, вероятно, не передаете строку, представляющую правильный объект JSON.

Ваша проблема исходит из этой строки:

 var videoDataParsed = `'${videoData}'`;
 

Вы пытаетесь преобразовать объект в строку здесь, но это не преобразуется должным образом, например, он неправильно обрабатывает кавычки " .

Если у вас есть объект, вы хотите заменить его следующим:

 var videoDataParsed = JSON.stringify(videoData);
 

Но похоже, что у вас уже есть строка, поэтому ваше дополнительное преобразование просто нарушает формат JSON. Так что, если вы просто удалите строку, о которой идет речь, все будет в порядке.