我有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"]
如何获取正确格式的价值?
答案 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'
即可获得所需的内容。