首页 > 解决方案 > 如何获取 JSONB 数组索引

问题描述

我确信对此有一个简单的答案,但我就是找不到。我需要获取 JSON 数组元素作为行,但它们的索引与后续处理相关。这是一个[非常简化的]示例:

id  content                                                 
--  ------------------------------------------------------------------
80  {"id":"107-80", "Sections": [{"parts":5},{"parts":8},{"parts":4}]}

我需要得到:

id section section_content 
-- ------- --------------- 
80 0       {"parts":5}     
80 1       {"parts":8}     
80 2       {"parts":4}     

我试过了:

select
  id,
  row_number() over() - 1 as section, 
  jsonb_array_elements(content -> 'Sections') as section_content
from purchase

但是section列计算不正确,如下图:

id  section  section_content 
--- -------- --------------- 
80  0        {"parts":5}     
80  0        {"parts":8}     
80  0        {"parts":4}     

标签: sqljsonpostgresqljsonb

解决方案


您可以使用with ordinality

select p.id, s.*
from purchase p
  cross join jsonb_array_elements(p.content -> 'Sections') with ordinality as s(section_content, section)

推荐阅读