Есть объект в котором свойства имеют значения содержащие кавычки. Если его провести через 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);