Skip to content

JSON_SET

功能描述

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

语法格式

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

参数说明

  • json_doc:JSON文本,JSON类型或JSON String类型。
  • path:路径表达式,字符类型。
  • val:新值,类型取值为NULL、布尔型、数值型、自定义类型(OBJECT、VARRAY、TABLE)、JSON类型以及其他能转换成字符型的类型。

说明:

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

函数返回类型

JSON数值类型。

示例

数组格式

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

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

JSON格式

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

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

数组与JSON格式混合使用

sql
SQL> SELECT TO_CHAR(JSON_SET('[1, {"a": 2}]', '$[0]', 10, '$[1].b', 11, '$[3]', 12));

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

数组通过CAST转化为JSON格式

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

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