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