使用 json_array_elements 扩展 JSON 数组时,是否可以将索引值添加到 postgreSQL 查询的行中?

Is it possible to add index values to the rows of a postgreSQL query when expanding JSON array with json_array_elements?

我有一个 json 格式的简历数据数据库,我正在尝试对其进行转换。 每个 jsib 中的一个部分是 work_history,这是一个 json 数组的形式,即

"work_experience":[
   {
      "job_title":"title",
      "job_description":"description"
   },
   {
      "job_title":"title",
      "job_description":"description"
   }
]

我正在遍历每个简历(json 文件)并使用 dbt 和 postgreSQL 将此数据导入到新的 table 中,数组的每个元素都是一个新行,其相关元数据为简历。这是我为此使用的代码

select
    json_array_elements(rjt.raw_json::json -> 'data' -> 'work_experience')  as we,
    json_array_elements(rjt.raw_json::json -> 'data' -> 'work_experience') -> 'job_title' as "name",
    rjt.uuid as uuid
from raw_json_table rjt

我需要做的最后一件事是添加一个列,列出每个工作在其单独的工作经验数组中的索引,即如果一个工作是数组中的第三个元素,它将在“ source_location”列。我怎样才能生成这个索引,使每个新的 json 文件都从 0 开始。

将函数移至 FROM 子句(应使用 set-returning 函数)。然后你可以使用 with ordinality 这也是 returns 指示数组内索引的列

select w.experience as we,
       w.experience ->> 'job_title' as "name",
       w.experience ->> 'job_description' as "description",
       w.idx as "index",
       rjt.uuid as uuid
from raw_json_table rjt
  left join json_array_elements(rjt.raw_json::json -> 'data' -> 'work_experience') with ordinality 
            as w(experience, idx) on true

left join 是必需的,这样 raw_json_table 中不包含数组元素的行仍然包含在内。