从 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 table2
给array
现在我想提取 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;
我有 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 table2
给array
现在我想提取 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;