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

JSON_OBJECT_FLATTEN

Описание​

JSON_OBJECT_FLATTEN преобразует вложенный объект JSON в одноуровневый объект JSON, ключи которого представляют собой пути к каждому конечному значению с точками в качестве разделителей. Функция следует семантике NiFi FlattenJson "keep-arrays": рекурсивно обходятся только объекты, а массивы, скалярные значения, значения null и пустые объекты сохраняются как неделимые конечные значения.

Если входное значение верхнего уровня не является объектом (например, это скалярное значение, массив или null), оно возвращается без изменений.

Синтаксис​

JSON_OBJECT_FLATTEN(<json_value>)

Параметры​

<json_value> - Значение JSON, которое нужно преобразовать в одноуровневую структуру. Должно иметь тип JSON.

Возвращаемое значение​

Возвращает значение JSON:

  • Если входное значение является вложенным объектом JSON, возвращает одноуровневый объект JSON, ключи которого представляют собой пути к каждому конечному значению с точками в качестве разделителей.
  • Если входное значение не является объектом (скалярное значение, массив или null), возвращает его без изменений.
  • Если входное значение равно NULL, возвращает NULL.

Примеры​

Преобразование простого вложенного объекта в одноуровневый объект​

SELECT json_object_flatten('{"a":{"b":2}}');
+--------------------------------------+
| json_object_flatten('{"a":{"b":2}}') |
+--------------------------------------+
| {"a.b":2} |
+--------------------------------------+

Глубоко вложенный объект​

SELECT json_object_flatten('{"a":{"b":{"c":3}}}');
+--------------------------------------------+
| json_object_flatten('{"a":{"b":{"c":3}}}') |
+--------------------------------------------+
| {"a.b.c":3} |
+--------------------------------------------+

Уже одноуровневый объект​

SELECT json_object_flatten('{"a":1,"b":"hi"}');
+-----------------------------------------+
| json_object_flatten('{"a":1,"b":"hi"}') |
+-----------------------------------------+
| {"a":1,"b":"hi"} |
+-----------------------------------------+

Массивы сохраняются как неделимые конечные значения​

SELECT json_object_flatten('{"a":[{"b":1},{"b":2}]}');
+------------------------------------------------+
| json_object_flatten('{"a":[{"b":1},{"b":2}]}') |
+------------------------------------------------+
| {"a":[{"b":1},{"b":2}]} |
+------------------------------------------------+
SELECT json_object_flatten('{"a":{"b":[1,2,3]}}');
+--------------------------------------------+
| json_object_flatten('{"a":{"b":[1,2,3]}}') |
+--------------------------------------------+
| {"a.b":[1,2,3]} |
+--------------------------------------------+

Значения верхнего уровня, не являющиеся объектами, возвращаются без изменений​

SELECT json_object_flatten('42');
+---------------------------+
| json_object_flatten('42') |
+---------------------------+
| 42 |
+---------------------------+
SELECT json_object_flatten('[1,2,{"x":3}]');
+--------------------------------------+
| json_object_flatten('[1,2,{"x":3}]') |
+--------------------------------------+
| [1,2,{"x":3}] |
+--------------------------------------+

Входное значение NULL​

SELECT json_object_flatten(NULL);
+---------------------------+
| json_object_flatten(NULL) |
+---------------------------+
| NULL |
+---------------------------+

Вложенный объект, содержащий скалярные значения, массивы и подобъекты​

SELECT json_object_flatten('{"x":{"s":1,"a":[1,2],"o":{"k":"v"}}}');
+--------------------------------------------------------------+
| json_object_flatten('{"x":{"s":1,"a":[1,2],"o":{"k":"v"}}}') |
+--------------------------------------------------------------+
| {"x.s":1,"x.a":[1,2],"x.o.k":"v"} |
+--------------------------------------------------------------+