Извлечение значения тега из строкового поля JSON в Oracle - PullRequest
0 голосов
/ 27 мая 2020

У меня есть столбец Oracle, в котором хранится строка JSON. Это пример значения

{
    "data": {
        "employer": {
            "status": "active",
            "name1": {
                "content": "My favorite company"
            }
        }
    }
}

Мне интересно получить значение тега содержимого, которое содержится в первом появлении тега name1. Итак, в этом примере я хочу получить «Моя любимая компания» (без кавычек)

Как мне сделать это в запросе Oracle SQL?

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

Вот один вариант; должно быть в порядке, если JSON данные простые , но - это то, что предлагает ваш пример:

SQL> select * from test;

JSON
--------------------------------------------------------------------------------
{
    "data": {
        "employer": {
            "status": "active",
            "name1": {
                "content": "My favorite company"
            }
        }
    }
}

Запрос:

  • temp CTE находит "content" строка и возвращает все, что следует за
  • , последний запрос извлекает то, что находится между 3-м и 4-м символом двойных кавычек

SQL> with temp as
  2    (select substr(json,
  3                   instr(json, '"content"')
  4                  ) content
  5     from test
  6    )
  7  select substr(content,
  8                instr(content, '"', 1, 3) + 1,
  9                instr(content, '"', 1, 4) - instr(content, '"', 1, 3) - 1
 10               ) result
 11  from temp;

RESULT
--------------------------------------------------------------------------------
My favorite company

SQL>
0 голосов
/ 27 мая 2020

Если вы используете Oracle 12.2 или выше, вы можете использовать следующий запрос -

SELECT JSON_VALUE(YOUR_COLUMN, $.content)
FROM YOUR_TABLE;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...