jsonb_set()

用于修改 jsonb 值中某个项的函数

jsonb_set() 是一个系统函数,用于在 jsonb 值中,通过指定的路径替换或创建某个项。

jsonb_set()PostgreSQL 9.5 中添加。

用法

jsonb_set ( target jsonb,
            path text[],
            new_value jsonb
            [, create_if_missing boolean ]
          )→ jsonb

如果提供的 path 对于 target 无效,则该路径会被忽略,并返回未更改的 target

如果提供的 path 包含的目标 jsonb 值中不存在的键,该键将被插入,除非 create_if_missing 被显式设置为 false

变更历史

示例

jsonb_set() 的基本用法示例

postgres=# SELECT jsonb_set('["foo","bar"]', '{1}', '"baz"');
   jsonb_set    
----------------
 ["foo", "baz"]
(1 row)

在此示例中,jsonb 数组的第二个元素已被新值替换。

包含在 path 中的负整数从各自数组的末尾开始计数。

postgres=# SELECT jsonb_set('[1,2,3]','{-1}', '99');
 jsonb_set  
------------
 [1, 2, 99]
(1 row)

如果 path 指向一个不存在的项,它将被插入,除非 create_if_missing 被设置为 false。

postgres=# SELECT jsonb_set('["foo","bar"]', '{2}', '"baz"');
       jsonb_set       
-----------------------
 ["foo", "bar", "baz"]
(1 row)

postgres=# SELECT jsonb_set('["foo","bar"]', '{2}', '"baz"', false);
   jsonb_set    
----------------
 ["foo", "bar"]
(1 row)

path 中指定的负整数,如果指向数组的起始位置之前,将导致该值被添加到数组的开头。

postgres=# SELECT jsonb_set('["foo","bar"]', '{-3}', '"baz"');
       jsonb_set       
-----------------------
 ["baz", "foo", "bar"]
(1 row)

json 对象中指定带有键的 path

postgres=# SELECT jsonb_set('{"foo": 1, "bar": 2}', '{"bar"}', '99');
       jsonb_set       
-----------------------
 {"bar": 99, "foo": 1}
(1 row)

修改多维数组。

postgres=# SELECT jsonb_set('[ [1,2], [3,4] ]', '{0,1}', '99');
     jsonb_set     
-------------------
 [⁠[1, 99], [3, 4]]
(1 row)

分类

JSON, 系统函数

另请参阅

jsonb_set_lax(), jsonb_insert(), jsonb_strip_nulls(), jsonb_path_exists()

反馈

请在此处提交任何关于 "jsonb_set()" 的评论、建议或更正 此处