VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

JSON_SET

功能描述

JSON_SET函数用于替换或新增json属性值。

语法格式

json_set(json_doc json, path jsonpath, val [, path jsonpath,val] ....)

根据path使用val值插入或更新json_doc,并返回修改后的json_doc。

参数说明

  • json doc

    被修改的json。

  • path

    被修改值的路径。

  • val

    插入或更新的新值。

注意事项

  • 该功能仅在数据库兼容模式为MySQL时能够使用(即创建DB时DBCOMPATIBILITY='B'),在其他数据库兼容模式下不能使用该特性。
  • 如果任何参数是NULL或者给出的path找不到指定的待插入或更新的json对象,则返回NULL。
  • 当json_doc或path参数不符合对应类型时,或者path中含有*或**通配符时,函数执行报错。
  • 该函数参数不定个数,可以传入一个json doc和多对 (path,val) 组合实际执行时,会从左到右调用(path,val) 组合,每调用一次就产生一个新的json_doc,下一个 (path,val) 应用在新的json_doc上。

  • 以下两种情况,会发生插入:

    • path指定的是一个对象的属性,对象存在,属性不存在,那么就给对象加上指定属性。
    • path指定的是一个数组的末尾的下一个位置,则把值插入到该位置拓展数组;如果实际是一个对象而不是数组,则会把该对象转为数组再插入新值。
  • 既不能更新又不符合插入条件,就跳过该 (path,val)继续执行。

示例

1、创建并进入兼容MySQL的库db_mysql。

CREATE DATABASE db_mysql DBCOMPATIBILITY 'B';
\c db_mysql 

2、调用函数。

select * from json_set('{"a": 1, "b": [2, 3]}', '$.a', 10, '$.c', '[true, false]');

结果返回如下:

                  json_set
----------------------------------------------
 {"a": 10, "b": [2, 3], "c": "[true, false]"}
(1 row)