从JSON对象或JSON数组中移除所有值为null
的字段或元素。
命令格式
JSON JSON_STRIP_NULLS(
JSON <json_expr>
[, BOOLEAN <include_arrays> ]
[, BOOLEAN <remove_empty> ]
[, STRING <json_path> ]
)
参数说明
参数 | 是否必填 | 描述 |
json_expr | 是 | JSON类型。JSON对象或JSON数组,详情请参见JSON数据类型。 |
include_arrays | 否 | BOOLEAN类型。是否从JSON数组中删除JSON空值,取值如下:
|
remove_empty | 否 | BOOLEAN类型。是否会在删除JSON空值后删除空的JSON对象,取值如下:
说明 若remove_empty值为 |
json_path | 否 | STRING类型。对于json_expr,移除json_path路径下的JSON空值。 说明 若使用json_path参数,必须保证有4个入参,且json_path为第4个入参。 |
返回值说明
返回JSON类型。返回规则如下:
如果JSON对象中的value为JSON null,则会删除关联的键值对。
如果函数生成的JSON中没有任何内容,则返回JSON null。
如果json_path为NULL或无效,则返回json_expr。
如果json_expr、include_arrays或remove_empty为NULL,则返回NULL。
使用示例
示例1:从JSON对象和JSON数组中删除JSON空值。
SELECT JSON_STRIP_NULLS(NULL) AS json_data1, JSON_STRIP_NULLS(JSON 'null') AS json_data2, JSON_STRIP_NULLS(JSON '[1, null, 2, null]') AS json_data3, JSON_STRIP_NULLS(JSON '[1, null, 2, null]', FALSE) AS json_data4, JSON_STRIP_NULLS(JSON '[1, null, 2, null, [null]]',TRUE,TRUE) AS json_data5, JSON_STRIP_NULLS(JSON '[1, null, 2, null, [null]]',NULL,TRUE) AS json_data6, JSON_STRIP_NULLS( JSON '{"a": {"b": {"c": null}}, "d": [null], "e": [], "f": 1}', FALSE,TRUE) AS json_data7, JSON_STRIP_NULLS( JSON '{"a": {"b": {"c": null}}, "d": [null], "e": [], "f": 1}', TRUE,TRUE) AS json_data8;
返回结果如下:
+------------+------------+------------+-----------------+------------+------------+---------------------------+------------+ | json_data1 | json_data2 | json_data3 | json_data4 | json_data5 | json_data6 | json_data7 | json_data8 | +------------+------------+------------+-----------------+------------+------------+---------------------------+------------+ | NULL | null | [1,2] | [1,null,2,null] | [1,2] | NULL | {"d":[null],"e":[],"f":1} | {"f":1} | +------------+------------+------------+-----------------+------------+------------+---------------------------+------------+
示例2:删除指定JSON路径下的空对象。
SELECT JSON_STRIP_NULLS( JSON '{ "person": { "name": "Alice", "address": { "street": null, "city": "New York", "zip": null }, "phone": null }, "company": { "name": "Acme Corp", "location": null } }', true, true, '$.person.address' ) AS json_data;
返回结果如下:
{"person":{"name":"Alice","phone":null,"address":{"city":"New York"}},"company":{"name":"Acme Corp","location":null}}
示例3:
json_path
无效或不合法时,函数不做处理,直接返回json_expr
。SELECT JSON_STRIP_NULLS( JSON '{ "person": { "name": "Alice", "address": { "street": null, "city": "New York", "zip": null }, "phone": null }, "company": { "name": "Acme Corp", "location": null }, "uid":null }', true, true, '$person.a' ) AS json_data;
返回结果如下:
{"uid":null,"person":{"name":"Alice","phone":null,"address":{"zip":null,"city":"New York","street":null}},"company":{"name":"Acme Corp","location":null}}
相关函数
JSON_STRIP_NULLS函数属于JSON函数,更多JSON类型函数请参见JSON函数。
该文章对您有帮助吗?