Oracle Select из столбца JSON с ключами через дефис

Скажем, у меня есть следующее, хранящееся в столбце JSON в базе данных Oracle:

{
    "key-with-hyphens": "value"
}

Предполагая, что этот столбец называется json_column в таблице с именем my_table, я пытаюсь выбрать значение для ключа "key-with-hyphens" следующим образом:

select json_column.key-with-hyphens from my_table;

Это дает мне следующую ошибку:

ORA-00936: missing expression
00936. 00000 -  "missing expression"

Есть ли какой-то особый синтаксис, который вам нужно использовать при выборе значения для ключа через дефис из столбца JSON в Oracle?


person Andrew Mairose    schedule 09.02.2017    source источник


Ответы (1)


Итак, оказывается, есть несколько способов сделать это.

Способ 1:

Делая это оригинальным способом, которым я пытался, было несколько проблем с этим выбором:

select json_column.key-with-hyphens from my_table;

Во-первых, выбор ключа в столбцах JSON не будет работать, если вы не назовете таблицу как таковую:

select mt.json_column.key-with-hyphens from my_table mt;

Однако это все еще не устраняет проблему с ключом через дефис. Чтобы разрешить использование ключей через дефис в этом синтаксисе, вам нужно заключить имя ключа в кавычки:

select mt.json_column."key-with-hyphens" from my_table mt;

Приведенный выше запрос будет работать, как и ожидалось.

Метод 2:

Другой способ сделать это без псевдонимов таблицы — использовать функцию json_value в предложении select. Вы передаете столбец JSON в качестве первого параметра и полный путь к ключу, который хотите выбрать, в качестве второго параметра, используя $ в качестве корневого контекста объекта JSON, хранящегося в вашем столбце. Следующий запрос также должен работать должным образом:

select json_value(json_column, '$."key-with-hyphens"') from my_table;
person Andrew Mairose    schedule 09.02.2017
comment
Хорошее место! Возможно, я упустил это из документации. - person cassiomolin; 20.12.2019