從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路徑下的Null 物件。
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函數。