跳到主要内容
版本:Candidate-4.0

json_remove

从JSON文档中删除一个或多个指定JSON路径的数据,并返回修改后的JSON文档。

提示

所有JSON函数和运算符都列在导航和概述页面

语法

json_remove(json_object_expr, json_path[, json_path] ...)

参数

  • json_object_expr: 表示JSON对象的表达式。对象可以是JSON列,或由JSON构造函数(如PARSE_JSON)生成的JSON对象。

  • json_path: 一个或多个表示JSON对象中应删除元素路径的表达式。每个参数的值都是字符串。有关StarRocks支持的JSON路径语法信息,请参阅JSON函数和运算符概述

返回值

返回删除了指定路径的JSON文档。

  • 如果路径在JSON文档中不存在,则会被忽略。
  • 如果提供了无效路径,则会被忽略。
  • 如果所有路径都无效或不存在,则返回未更改的原始JSON文档。

示例

示例1: 从JSON对象中删除单个键。

mysql> SELECT json_remove('{"a": 1, "b": [10, 20, 30]}', '$.a');

-> {"b": [10, 20, 30]}

示例2: 从JSON对象中删除多个键。

mysql> SELECT json_remove('{"a": 1, "b": [10, 20, 30], "c": "test"}', '$.a', '$.c');

-> {"b": [10, 20, 30]}

示例3: 从JSON对象中删除数组元素。

mysql> SELECT json_remove('{"a": 1, "b": [10, 20, 30]}', '$.b[1]');

-> {"a": 1, "b": [10, 30]}

示例4: 删除嵌套对象属性。

mysql> SELECT json_remove('{"a": {"x": 1, "y": 2}, "b": 3}', '$.a.x');

-> {"a": {"y": 2}, "b": 3}

示例5: 尝试删除不存在的路径(被忽略)。

mysql> SELECT json_remove('{"a": 1, "b": 2}', '$.c', '$.d');

-> {"a": 1, "b": 2}

示例6: 删除多个路径,包括不存在的路径。

mysql> SELECT json_remove('{"a": 1, "b": 2, "c": 3}', '$.a', '$.nonexistent', '$.c');

-> {"b": 2}

使用说明

  • json_remove函数遵循MySQL兼容的行为。
  • 无效的JSON路径会被静默忽略,而不是导致错误。
  • 该函数支持在单个操作中删除多个路径,这比多个单独操作更高效。
  • 目前,该函数支持简单的对象键删除(例如,$.key)。复杂嵌套路径和数组元素删除的支持在当前实现中可能有限。