从jsonb字段构建jsonb数组

6

我有一个名为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个回答

4
->>操作符会将字段(在您的情况下,是JSON数组)的值作为适当转义的文本返回。你需要使用的是->操作符。
但请注意,对其使用jsonb_build_array将返回一个包含原始数组的数组,这很可能也不是您想要的;只需使用options->'names'即可获得您想要的结果。

2

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接