Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


JSON_SET

📄字数 773
👁️阅读量 加载中...

功能描述

替换或插入新值,在一个JSON文本中插入或更新数据并返回新的JSON文本。

语法格式

sql
JSON_SET( json_doc, path, val[, path, val]... )

输入参数

  • json_doc:JSON文本,JSON类型或字符类型。

  • path:路径表达式,字符类型。

  • val:新值,类型取值为NULL、布尔型、数值型、自定义类型(OBJECT、VARRAY、TABLE)、JSON类型以及其他能转换成字符型的类型。

输出结果

JSON类型。任意参数为NULL时,输出结果为NULL

提示

  • 从左到右计算新值,产生的新值用于后续计算。
  • 文档中path存在值时,则使用新值替换。
  • 若JSON文本为对象,路径表述为对象键且JSON文本中不存在相同的键,则该路径表述的对象键与val值将被作为新的键值对加入到JSON对象中。
  • 路径表述为数组下标且处于JSON文本指定数组末尾之后,数组使用新值扩展。若路径指定值不为数组,则将其包装成数组,然后使用新值扩展。
  • 除了上述两类不存在的路径的值将被忽略。
  • 以下情况将导致系统抛出错误:
    1. json_doc是无效的JSON文档。
    2. 任何path是无效的路径表达式。
    3. 路径表达式中包含***通配符。

示例

sql
-- 更新 x 键对应值并插入新的键值对
SQL> SELECT JSON_SET('{"x": 1}', '$.x', '10', '$.y', '[1, 2]');

+----------------------------+
|           EXPR1            |
+----------------------------+
| {"x": "10", "y": "[1, 2]"} |
+----------------------------+

SQL> SELECT JSON_SET('{"x": 1}', '$.x', '10', '$.y', '{"z": 2}');

+--------------------------------+
|             EXPR1              |
+--------------------------------+
| {"x": "10", "y": "{\"z\": 2}"} |
+--------------------------------+

SQL> SELECT JSON_SET('{"x": 1}', '$.x', '10', '$.y', CAST('[1, 2]' AS JSON));

+--------------------------+
|          EXPR1           |
+--------------------------+
| {"x": "10", "y": [1, 2]} |
+--------------------------+

-- 新增数据下标在数组末尾之后
SQL> SELECT JSON_SET('[1, {"a": 2}]', '$[0]', 10, '$[1].b', 11, '$[3]', 12);

+-----------------------------+
|            EXPR1            |
+-----------------------------+
| [10, {"a": 2, "b": 11}, 12] |
+-----------------------------+

-- JSON对象包装成数组后扩展
SQL> SELECT JSON_SET('{"a": 2}', '$[1]', 10);

+----------------+
|     EXPR1      |
+----------------+
| [{"a": 2}, 10] |
+----------------+

-- JSON数组忽略对象键路径与值
SQL> SELECT JSON_SET('[1, {"a": 2}]', '$.a', 10);

+---------------+
|     EXPR1     |
+---------------+
| [1, {"a": 2}] |
+---------------+