📜  jsonb_set (1)

📅  最后修改于: 2023-12-03 15:17:04.881000             🧑  作者: Mango

jsonb_set函数介绍

在 PostgreSQL 中,我们可以使用 jsonb 数据类型存储一些 JSON 格式的信息。jsonb_set 函数是一种常用的修改 JSON 数据的操作函数。

函数参数

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

  • target:需要修改的 JSON 数据;
  • path:需要修改的 JSON 数据的路径;
  • new_value:要替换为的新值;
  • create_missing:可选参数,如果为 true,则在指定路径中新建节点。如果为 false(默认值),则新建节点时会报错。
函数作用

jsonb_set 函数用于在指定路径下,将 JSON 对象中的指定键值对替换为新的键值对。如果路径中不存在该节点,则可以根据 create_missing 参数来控制是否新建节点。

代码示例
-- 创建一个 JSONB 类型的表
CREATE TABLE example (
    id SERIAL,
    data JSONB NOT NULL
);

-- 插入一条需要修改的 JSON 数据
INSERT INTO example (data) VALUES ('{"name": "张三", "age": 18}');

-- 使用 jsonb_set 函数更新数据
UPDATE example SET data = jsonb_set(data, '{name}', '"李四"');

-- 查询修改后的数据
SELECT * FROM example;

代码输出结果:

 id |         data
----+---------------------
  1 | {"name": "李四", "age": 18}
注意事项
  • jsonb_set 函数只能修改 JSON 值,不能修改 JSON 对象或数组类型;
  • 如果创建新节点时指定的键值对已经存在于目标 JSON 中,则新的值会覆盖原有的值;
  • 如果 path 中的某个层级不是一个对象,而是一个 JSON 数组,则使用数字作为索引来访问数组中的元素。例如:jsonb_set(data, '{list,0,name}', '"张三"') 表示在一个名为 list 的数组中的第一个元素的名称为张三。
参考资料