powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / строка, json и обратные слэши
6 сообщений из 6, страница 1 из 1
строка, json и обратные слэши
    #39456067
Darkripple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
добрый день.
так само собой не работает:
Код: sql
1.
select cast('{"Название":"ОАО "Ноги""}' as json);

так тоже не работает:
Код: sql
1.
select cast('{"Название":"ОАО \"Ноги\""}' as json);

так - работает:
Код: sql
1.
select cast('{"Название":"ОАО \\"Ноги\\""}' as json);

вот этот запрос
Код: sql
1.
select concat('{"Название":"ОАО ', char(92), char(92),'"Ноги', char(92), char(92), '""}') tt

выдаёт
{"Название":"ОАО \\"Ноги\\""}

подставляем этот запрос в преобразование json-а
Код: sql
1.
2.
select cast(tt as json) aa
  from (select concat('{"Название":"ОАО ', char(92), char(92),'"Ноги', char(92), char(92), '""}') tt) q

в итоге получаем что-то вообще странное:
"base64:type15:eyLQndCw0LfQstCw0L3QuNC1Ijoi0J7QkNCeIFxcItCd0L7Qs9C4XFw="

изначальный задача:
у меня есть функция,которая на вход принимает JSON в виде текста.
далее внутри функции этот текст преобразуется в JSON - cast(text as json), и потом уже работает с ним.
всё рушится когда на вход функции из php подаётся вот такая строка
'{"Название":"ОАО \"Ноги\""}' .
Получаю
Invalid JSON text in argument 1 to function cast_as_json: "Missing a comma or '}' after an object member." at position ... .

Главный вопрос: как мне полученную на входе строку '{"Название":"ОАО \"Ноги\""}' превратить в json?
...
Рейтинг: 0 / 0
строка, json и обратные слэши
    #39456129
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Darkrippleкак мне полученную на входе строку '{"Название":"ОАО \"Ноги\""}' превратить в json?
Не понимаю...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
mysql> set @x = '{"Название":"ОАО \\\"Ноги\\\""}';
Query OK, 0 rows affected (0.00 sec)

mysql> select @x;
+--------------------------------------------+
| @x                                         |
+--------------------------------------------+
| {"Название":"ОАО \"Ноги\""}                |
+--------------------------------------------+
1 row in set (0.00 sec)

mysql> select CAST(@x AS JSON);
+---------------------------------------------+
| CAST(@x AS JSON)                            |
+---------------------------------------------+
| {"Название": "ОАО \"Ноги\""}                |
+---------------------------------------------+
1 row in set (0.02 sec)

mysql> select JSON_VALID(@x);
+----------------+
| JSON_VALID(@x) |
+----------------+
|              1 |
+----------------+
1 row in set (0.03 sec)
...
Рейтинг: 0 / 0
строка, json и обратные слэши
    #39456131
Darkripple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пока что я понял, что MySQL встречая слэш перед кавычками считает его экранирующим и не воспринимает как часть строки.
соотвественно
Код: sql
1.
select cast('{"Название":"ОАО \"Ноги\""}' as char)

выдаёт
{"Название":"ОАО "Ноги""}
И пара символов \" (слэш и двойная кавычка) для него всё равно что просто двойная кавычка.
Значит мне видимо надо как-то разделять кавычки экранированные слэшем от кавычек json-а, чтобы заменить их на что-то другое...
...
Рейтинг: 0 / 0
строка, json и обратные слэши
    #39456137
Darkripple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
я наверно не правильно обрисовал проблему.
@x у меня на входе такой:
Код: sql
1.
set @x = '{"Название":"ОАО \"Ноги\""}';

соответственно запрос выдаст ошибку.
то есть задача у меня преобразовать '{"Название":"ОАО \"Ноги\""}' в '{"Название":"ОАО \\\"Ноги\\\""}'
...
Рейтинг: 0 / 0
строка, json и обратные слэши
    #39456163
Darkripple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сразу скажу что интересует вариант решения внутри MySQL, то есть на входе имеем то, что имеем, и работать надо с этим.

P.S. пока что проблема топорно решена изменением значения параметра в вызывающей системе (внутренняя двойная кавычка просто заменяется на набор символов, с последующим обратным преобразованием уже на стороне MySQL). Но это мне кажется нехорошим вариантом, так как приходится менять код во всех точках вызова.
...
Рейтинг: 0 / 0
строка, json и обратные слэши
    #39456173
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Darkrippleзадача у меня преобразовать '{"Название":"ОАО \"Ноги\""}' в '{"Название":"ОАО \\\"Ноги\\\""}'
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
USE service

CREATE TABLE quoted_chars(spec_char CHAR(1), quoted_char CHAR(2));

INSERT INTO quoted_chars(spec_char, quoted_char)
SELECT '\\','\\\\'    UNION ALL
SELECT char(0),'\\0'  UNION ALL
SELECT char(8),'\\b'  UNION ALL
SELECT char(9),'\\t'  UNION ALL
SELECT char(10),'\\n' UNION ALL
SELECT char(13),'\\r' UNION ALL
SELECT char(26),'\\Z' UNION ALL
SELECT '\'','\\\''    UNION ALL
SELECT '\"','\\\"'    UNION ALL
SELECT '%','\\%'      UNION ALL
SELECT '_','\\_' ;


Заменяй...
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / строка, json и обратные слэши
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]