我有一个JSON如下:
{
"users": [1, 2, 3]
}
我正在将users
JSON数组转换为PostgreSQL数组:
select user.identifier
from jsonb_array_elements_text(('{"users": [1, 2, 3]}'::jsonb)->'users') as user(identifier);
返回text
个值的数组。我想要一个integer
值的数组。使用子查询,它可能看起来如下,但这是相当笨拙的:
select user.identifier
from (select user.identifier::integer from jsonb_array_elements_text(('{"users": [1, 2, 3]}'::jsonb)->'users') as user(identifier)) user
如果没有额外的子查询,这是否可行?我在文档中找不到这样的语法或效用函数。
答案 0 :(得分:2)
t=# select array_agg(identifier)::int[], pg_typeof(array_agg(identifier)::int[])
from jsonb_array_elements_text(('{"users": [1, 2, 3]}'::jsonb)->'users') as u(identifier);
array_agg | pg_typeof
-----------+-----------
{1,2,3} | integer[]
(1 row)
答案 1 :(得分:0)
您可以将jsonb_array_elements_text
与ARRAY
构造函数一起使用,并将其转换为int[]
,例如:
SELECT ARRAY(
SELECT jsonb_array_elements_text('{"users": [1, 2, 3]}'::jsonb->'users'))::int[]