Задать вопрос
alexjet73
@alexjet73

Почему JSON.stringify выдаёт невалидный JSON если в нём есть кавычки? Как исправить?

Есть объект в котором свойства имеют значения содержащие кавычки. Если его провести через JSON.stringify и записать в например в базу, то строка на выходе и в базе будет иметь невалидный JSON из-за того, что кавычки экранированы одним слешом. И естественно попытка спарсить строку JSON.parse выдает ошибку.
Почему так происходит и как этого избежать без костылей и перевода кавычек в другие кодировки(JSON_HEX_APOS)?
Т.е. сделать просто чтоб JSON.stringify выдавал валидный JSON экранируя кавычки по правилам

Конвертируемый объект:
this.obj = {};
Функция добавления в объект:
//Пример вызова this.get('g129', {prop:'{{main.getProp("x")}}'});
this.get = function(name,param){
this.obj[name] = param;
}

Функция конвертирования:
this.save = function(){
        return JSON.stringify(this.obj);
    }

Отправка на сервер:
formData.append('file', blob);
formData.append('dataobj', gk.save()); // Добавление в запрос JSON текста
jQuery.ajax({
                            url: "/ajax?act=udata",
                            type: "post",
                            data: formData, // important
                            processData: false, // important
                            contentType: false, // important!
                            success: function (res) {
                                alert('OK!');
                                console.log(res);
                            }
                        });

На сервере (приём):
$jsondata = wp_unslash($_POST['dataobj']);
$wpdb->insert(
            'gk_data',
            array( 'data' => $jsondata ),
            array( '%s')
        );


Выгрузка из бд происходит через обычный запрос ($wpdb->get_results) и внедрение в переменную JS
var jsonload = '<?=res[0]->data?>' ;
Потом попытка конвертировать заканчивается неудачей JSON.parse(jsonload);
  • Вопрос задан
  • 2273 просмотра
Подписаться 1 Средний 17 комментариев
Пригласить эксперта
Ответы на вопрос 1
joeberetta
@joeberetta Куратор тега JavaScript
Читай: https://epdf.pub/google-for-dummies.html
1. Возможно редактор кода автоматом меняет кавычки, тогда поменяйте в настройках
2. Костыль(предосторожность): JSON.stringify(JSON.parse(jsonObj))
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы