Это выглядит как регулярное выражение для выделения ключей и заключения в квадратные скобки строки JSON - к сожалению, если это так, то это не работает во всех ситуациях.
Регулярное выражение
'"\w+\":'
будет соответствовать:
- A
"
двойная кавычка; \w+
одно или несколько слов (a-z
или A-Z
или 0-9
или _
) символов; \"
еще одна двойная кавычка - примечание: символ \
не обязателен ;затем - A
:
двоеточие.
Итак:
REGEXP_REPLACE(
'{"key":"value","key2":"value with \"quote"}',
'"\w+":', -- Pattern matched
'' -- Replacement string
)
Будет выводить:
{"value","value with \"quote"}
Второй шаблон {|}|"
будет соответствовать символу {
, }
или "
(и мог бы быть эквивалентно записан как [{}"]
), поэтому:
REGEXP_REPLACE(
'{"value","value with \"quote"}',
'{|}|"', -- Pattern matched
'' -- Replacement string
)
Выводит:
value,value with \quote
Это нормально, пока (как в моем примере) у вас не будет экранированных двойных кавычек (или фигурных скобок) в строке значения;в этом случае они также будут удалены, оставив escape-символ.
(Примечание: обычно вы не найдете его, но в ключ можно включить экранированные кавычки. Так что {"keywith\":quote":"value"}
будет заменендо {quote":"value"}
, а затем quote:value
, что не является ожидаемым выводом.)
Если вы пытаетесь выполнить синтаксический анализ JSON (до Oracle 12), тогда вы можете использовать:
REGEXP_REPLACE(
'{"key":"value","key2":"value with \"quote","keywith\":quote":"value with \"{}"}',
'^{|"(\\"|[^"])+":(")?((\\"|[^"])+?)\2((,)|})',
'\3\6'
)
Какие выходы:
value,value with \"quote,value with \"{}
Или в Oracle 12 вы можете сделать:
SELECT *
FROM JSON_TABLE(
'{"key":"value","key2":"value with \"quote","keywith\":quote":"value with \"{}"}',
'$.*' NULL ON ERROR
COLUMNS (
value VARCHAR2(4000) PATH '$'
)
)
Какие выходы:
VALUE
-----------------
value
value with "quote
value with "{}