Моя цель - просто преобразовать объект JavaScript в JSON и вставить его в строку MySQL, в которой хранится тип данных MySQL JSON. Этот процесс должен происходить как часть большой пакетной вставки, поэтому я не могу редактировать данные вручную. При вызове JSON .stringify для объекта я получаю действительное значение JSON, но, поскольку объект содержит текст песни, который часто содержит одинарные кавычки, при попытке выполнить запрос SQL, MySQL выдает ошибку разбора ,
Это прекрасно работает
const validJson = '{"foo": "bar", "buzz": 1}';
INSERT INTO table_name ( songid, json )
VALUES ( ${song.songid}, ${validJson} );
Но это не
const validJsonWithASingleQuote = {"foo's": "bar", "buzz": 1}';
INSERT INTO table_name ( songid, json )
VALUES ( ${song.songid}, ${validJsonWithASingleQuote} );
Я также попытался использовать подготовленное утверждение без удачи
PREPARE myInsert FROM 'INSERT INTO table_name ( songid, json ) VALUES ( ?, ? )';
SET @a = ${song.songid};
SET @b = ${JSON.stringify(r)};
EXECUTE myInsert USING @a, @b;
Я должен также упомянуть, что исходные JavaScript объекты содержат строки, в которых одинарные кавычки экранированы знаком "\". Метод JSON .stringify декодирует эти обратные слэши.
К сожалению, все вопросы SO, которые я нашел в этой топи c, либо рекомендуют экранировать одиночные кавычки с помощью "\" вручную, либо они не разрешены. Есть ли програматический c способ сделать это? 1028 *? Возможно, метод JavaScript или MySQL, который генерирует действительные JSON и оставляет последовательности "\" в?