MySQL - вставить один escape-символ в поле MySQL JSON - PullRequest
0 голосов
/ 18 июня 2020

Имея дело с головной болью различных наборов правил с экранированием ТЕКСТА и JSON экранированием, я столкнулся с проблемой, когда требуется двойное экранирование для преобразования строки в литерал JSON. Например, исходное ОБНОВЛЕНИЕ выглядит так:

UPDATE sourcing_item_data SET data_JSON='{"test": "test \ test"}' WHERE ID = 1;

Приведенное выше просто удаляет '\'.

Проблема в том, что я не вижу, как мы получаем один backsla sh в систему. Использование двух вызывает ошибку Invalid JSON. Использование тройки делает то же самое. Использование четырех вставляет два.

Как получить один backsla sh в JSON литерал из строки с MySQL?

Кроме того, Кто-нибудь написал SP или функцию, которая сканирует строку, которая должна быть преобразована в MySQL JSON, чтобы убедиться, что строка «очищена» от проблем (таких как эта)?

Спасибо!

1 Ответ

1 голос
/ 18 июня 2020

Четыре обратной косой черты работают.

UPDATE sourcing_item_data SET data_JSON='{"test": "test \\\\ test"}' WHERE ID = 1;

Вам нужно удвоить обратную косую черту sh, чтобы экранировать ее в JSON, а затем удвоить каждую из них, чтобы избежать в строке SQL.

Если вы напечатаете значение JSON, оно будет отображаться как две обратные косые черты, но это потому, что оно показывает значение в формате JSON, что означает, что обратная косая черта sh должна быть экранирована. Если вы извлечете значение и отмените кавычки, будет только одна backsla sh.

select data_JSON->>"$.test" as result 
from sourcing_item_data
WHERE id = 1;

показывает test \ test

DEMO

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...