将数组从jsonb_array_elements_text()转换为整数数组

时间:2018-01-14 20:40:42

标签: sql postgresql jsonb

我有一个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

如果没有额外的子查询,这是否可行?我在文档中找不到这样的语法或效用函数。

2 个答案:

答案 0 :(得分:2)

立即

you can aggregate

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_textARRAY构造函数一起使用,并将其转换为int[],例如:

SELECT ARRAY(
  SELECT jsonb_array_elements_text('{"users": [1, 2, 3]}'::jsonb->'users'))::int[]