Перейти к основному содержимому

Обзор JSON функций и операторов

Эта тема предоставляет обзор JSON конструкторных функций, функций запросов и обработки, операторов и выражений путей, которые поддерживаются Selena.

подсказка

Ускорьте ваши запросы с помощью generated columns

JSON конструкторные функции

JSON конструкторные функции используются для создания JSON данных, таких как JSON объекты и JSON массивы.

ФункцияОписаниеПримерВозвращаемое значение
json_objectПреобразует одну или несколько пар ключ-значение в JSON объект, состоящий из пар ключ-значение, которые отсортированы по ключу в словарном порядке.SELECT JSON_OBJECT('Daniel Smith', 26, 'Lily Smith', 25);{"Daniel Smith": 26, "Lily Smith": 25}
json_arrayПреобразует каждый элемент SQL массива в JSON значение и возвращает JSON массив, состоящий из этих JSON значений.SELECT JSON_ARRAY(1, 2, 3);[1,2,3]
parse_jsonПреобразует строку в JSON значение.SELECT PARSE_JSON('{"a": 1}');{"a": 1}

JSON функции запросов и обработки

JSON функции запросов и обработки используются для запроса и обработки JSON данных. Например, вы можете использовать выражение пути для поиска элемента в JSON объекте.

ФункцияОписаниеПримерВозвращаемое значение
arrow functionЗапрашивает элемент, который может быть найден по выражению пути в JSON объекте.SELECT parse_json('{"a": {"b": 1}}') -> '$.a.b';1
castПреобразует данные между JSON типом данных и SQL типом данных.SELECT CAST(1 AS JSON);1
get_json_doubleАнализирует и получает значение с плавающей точкой из указанного пути в JSON строке.SELECT get_json_double('{"k1":1.3, "k2":"2"}', "$.k1");1.3
get_json_intАнализирует и получает целочисленное значение из указанного пути в JSON строке.SELECT get_json_int('{"k1":1, "k2":"2"}', "$.k1");1
get_json_stringАнализирует и получает строки из указанного пути в JSON строке.SELECT get_json_string('{"k1":"v1", "k2":"v2"}', "$.k1");v1
json_queryЗапрашивает значение элемента, который может быть найден по выражению пути в JSON объекте.SELECT JSON_QUERY('{"a": 1}', '$.a');1
json_eachРазворачивает элементы верхнего уровня JSON объекта в пары ключ-значение.SELECT * FROM tj_test, LATERAL JSON_EACH(j);!json_each
json_existsПроверяет, содержит ли JSON объект элемент, который может быть найден по выражению пути. Если элемент существует, эта функция возвращает 1. Если элемент не существует, функция возвращает 0.SELECT JSON_EXISTS('{"a": 1}', '$.a'); 1
json_keysВозвращает ключи верхнего уровня из JSON объекта как JSON массив, или, если указан путь, ключи верхнего уровня из пути.SELECT JSON_KEYS('{"a": 1, "b": 2, "c": 3}');["a", "b", "c"]
json_lengthВозвращает длину JSON документа.SELECT json_length('{"Name": "Alice"}');1
json_stringПреобразует JSON объект в JSON строкуSELECT json_string(parse_json('{"Name": "Alice"}'));{"Name": "Alice"}

JSON операторы

Selena поддерживает следующие JSON операторы сравнения: <, <=, >, >=, =, и !=. Вы можете использовать эти операторы для запроса JSON данных. Однако это не позволяет использовать IN для запроса JSON данных. Для получения дополнительной информации о JSON операторах см. JSON operators.

JSON выражения путей

Вы можете использовать JSON выражение пути для запроса элемента в JSON объекте. JSON выражения путей имеют тип данных STRING. В большинстве случаев они используются с различными JSON функциями, такими как JSON_QUERY. В Selena JSON выражения путей не полностью соответствуют спецификациям SQL/JSON путей. Для получения информации о синтаксисе JSON путей, поддерживаемом в Selena, см. следующую таблицу, в которой в качестве примера используется следующий JSON объект.

{
"people": [{
"name": "Daniel",
"surname": "Smith"
}, {
"name": "Lily",
"surname": "Smith",
"active": true
}]
}
Символ JSON путиОписаниеПример JSON путиВозвращаемое значение
$Обозначает корневой JSON объект.'$'{ "people": [ { "name": "Daniel", "surname": "Smith" }, { "name": "Lily", "surname": Smith, "active": true } ] }
.Обозначает дочерний JSON объект.' $.people'[ { "name": "Daniel", "surname": "Smith" }, { "name": "Lily", "surname": Smith, "active": true } ]
[]Обозначает один или несколько индексов массива. [n] обозначает n-й элемент в массиве. Индексы начинаются с 0.
Selena 2.5 поддерживает запросы многомерных массивов, например, ["Lucy", "Daniel"], ["James", "Smith"]. Для запроса элемента "Lucy" вы можете использовать $.people[0][0].
'$.people [0]'{ "name": "Daniel", "surname": "Smith" }
[*]Обозначает все элементы в массиве.'$.people[*].name'["Daniel", "Lily"]
[start: end]Обозначает подмножество элементов из массива. Подмножество определяется интервалом [start, end], который исключает элемент, обозначенный конечным индексом.'$.people[0: 1].name'["Daniel"]