Перейти к основному содержимому
Версия: 2.0.x

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

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

подсказка

Ускорьте ваши запросы с помощью генерируемых столбцов

Функции-конструкторы 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-объекте.

ФункцияОписаниеПримерВозвращаемое значение
функция стрелкиЗапрашивает элемент, который можно найти по выражению пути в 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_removeУдаляет данные из JSON-документа по одному или нескольким указанным JSON-путям.SELECT JSON_REMOVE('{"a": 1, "b": [10, 20, 30]}', '$.a', '$.b[1]');{"b": [10, 30]}
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.

Выражения путей 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"]