json - 如何将json压平成表格

标签 json postgresql

我刚刚意识到在我的 AWS Aurora postgres 集群上,具有 temp_tables 功能的函数对只读副本不友好。我需要重写(使用 CTE)- 无论如何......我如何使用嵌套数组的 json 对象并将它们展平到一个表中,如下所示:

{
  "data": [
    {
      "groupName": "TeamA",
      "groupCode": "12",
      "subGroupCodes": [
        "11"
      ]
    },
    {
      "groupName": "TeamB",
      "groupCode": "13",
      "subGroupCodes": [
        "15", "22"
      ]
    }
  ]
}

我希望输出表是:

groupName  groupCode  subGroupCodes
TeamA      12         11
TeamB      13         15
TeamB      13         22

我知道我可以通过以下方式完成大部分工作:

SELECT j."groupCode" as int, j."groupName" as pupilgroup_name
FROM json_to_recordset(p_in_filters->'data') j ("groupName" varchar(50), "groupCode" int)

但我只需要获取子组代码,但解包数组并加入正确的父组代码。

最佳答案

需要先unnest数组,然后再unnest得到子组代码:

with data (j) as (
values ('{
  "data": [
    {
      "groupName": "TeamA",
      "groupCode": "12",
      "subGroupCodes": [
        "11"
      ]
    },
    {
      "groupName": "TeamB",
      "groupCode": "13",
      "subGroupCodes": [
        "15", "22"
      ]
    }
  ]
}'::jsonb)
)
select e ->> 'groupName' as group_name, 
       e ->> 'groupCode' as code,
       sg.*
from data d
  cross join lateral jsonb_array_elements(d.j -> 'data') as e(g)
  cross join lateral jsonb_array_elements_text(g -> 'subGroupCodes') as sg(subgroup_code)

关于json - 如何将json压平成表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56901263/

相关文章:

json - 如何在 Rest API 中查询特定路线的好友帖子

python - 使用 Django 在另一台服务器上创建 PostgreSQL 数据库

ruby-on-rails - 无法在 postgresql 中创建数据库

sql - 从 PostgreSQL 中的表中提取网络/树结构

json - 如果 REST API 返回 JSON,那么 MIME 类型是什么?

json - Codable 和 JSON 的问题

php - 简单的JSON问题

Android Json 图像解析到 recyclerView with picasso

postgresql - Postgres 自定义范围类型

sql - 是否可以创建层次结构但在 Postgres 中有多个行?