跳到主要内容

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"} |
+--------------------------------------------------------------+