访问jsonb数组中元素的索引

时间:2018-06-27 17:19:11

标签: postgresql jsonb

我想访问jsonb数组中元素的索引,如下所示:

SELECT
  jsonb_array_elements(data->'Steps') AS Step,
  INDEX_OF_STEP

FROM my_process

为此,我在manual中看不到任何功能。 这可能吗?

2 个答案:

答案 0 :(得分:2)

使用with ordinality.必须在from子句中调用该函数:

with my_process(data) as (
values
    ('{"Steps": ["first", "second"]}'::jsonb)
)

select value as step, ordinality- 1 as index
from my_process
cross join jsonb_array_elements(data->'Steps') with ordinality

   step   | index 
----------+-------
 "first"  |     0
 "second" |     1
(2 rows)    

阅读文档(7.2.1.4. Table Functions):

  

如果指定了WITH ORDINALITY子句​​,则将bigint类型的附加列添加到函数结果列中。该列为函数结果集的行编号,从1开始。

答案 1 :(得分:1)

您可以尝试使用

jsonb_each_text(jsonb)

应同时提供键和值。

此问题有一个示例: Extract key, value from json objects in Postgres 除了您将使用jsonb版本。