从jsonb字段构建jsonb数组

时间:2019-09-09 16:05:23

标签: postgresql jsonb

我有options列,其类型为jsonb,格式为{"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 table2给出array

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

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

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

如何获取正确格式的价值?

2 个答案:

答案 0 :(得分:4)

实际上,您不需要使用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;

答案 1 :(得分:2)

->>运算符将以正确的转义文本形式返回字段的值(在您的情况下为JSON数组)。您正在寻找的是->运算符。

但是,请注意,使用jsonb_build_array将返回包含原始数组的数组,这可能也不是您想要的;只需使用options->'names'即可获得所需的内容。