извлечь значение из json в oracle - PullRequest
0 голосов
/ 10 апреля 2020

Для приведенных ниже возможных значений JSON в столбце мне нужно извлечь значение для атрибута CAT Входная таблица

|  VALUES                                                    |
--------------------------------------------------------------
| {"ANIMALS":"1","DOG":"D1","CAT":"C1"}                      |
| {"ANIMALS":"2","DOG":"D2","CAT":"C2"}                      |
| {"ANIMALS":"3","DOG":"D3"}                                 |
| {"ANIMALS":"4","CAT":"C4", "DOG":"D4"}                     |
--------------------------------------------------------------

ПРИМЕЧАНИЕ. В качестве JSON может быть много других неупорядоченных атрибутов. мог.

Ожидаемый результат

| CAT     |
-----------
| C1      |
| C2      |
| NULL    |
| C4      |
-----------

Я пытался использовать что-то вроде

SELECT REGEXP_SUBSTR('{"ANIMALS":"1","DOG":"D1","CAT":"C1"}', 'CAT[^,]+') "REGEXPR_SUBSTR" FROM DUAL;

, что дает мне CAT":"C1"} для вышеупомянутый ввод, который не удовлетворяет моей потребности получить значение.

1 Ответ

0 голосов
/ 10 апреля 2020

Согласно предложению, JSON_VALUE выполнит трюк, так как значения JSON

SELECT
    JSON_VALUE('{"ANIMALS":"1","DOG":"D1","CAT":"C1"}', '$.CAT') AS value
FROM
    dual
...