从 jsonb 字段构建 jsonb 数组

Build jsonb array from jsonb field

我有 jsonb 类型的列 options,格式为 {"names": ["name1", "name2"]},它是用

创建的
UPDATE table1 t1 SET options = (SELECT jsonb_build_object('names', names) FROM table2 t2 WHERE t2.id= t1.id)

其中 names 类型为 jsonb 数组。

SELECT jsonb_typeof(names) FROM table2array

现在我想提取 names 的值作为 jsonb 数组。但是查询

SELECT jsonb_build_array(options->>'names') FROM table 

给了我 ["[\"name1\", \"name2\"]"],而我期望 ["name1", "name2"]

如何获得正确格式的值?

->> 运算符将 return 字段的值(在您的例子中是 JSON 数组)作为正确转义的文本。您正在寻找的是 -> 运算符。

但是,请注意,使用 jsonb_build_array 将 return 一个包含原始数组的数组,这可能也不是您想要的;只需使用 options->'names' 即可满足您的需求。

实际上,您不需要使用 jsonb_build_array() 功能。

使用 select options -> 'names' from table; 这将解决您的问题。

jsonb_build_array() 用于从 jsonb 对象生成数组。你走错了路。这就是为什么你得到这样的字符串 ["[\"name1\", \"name2\"]"].

尝试执行此示例 SQL 脚本:

select j->'names'
from (
  select '{"names": ["name1", "name2"]}'::JSONB as j
) as a;