Postgres JSONB 数据类型 - 如何从 postgres 数据库的 JSON(JsonB 类型)字段中提取数据?

Postgres JSONB datatype - How to extract data from JSON (of type JsonB) field of postgres database?

朋友们大家好, 我需要帮助来解决以下问题,

我在我的 postgres 数据库 table 中有一组记录,其中 table 有 JSONB 类型字段。

JSONB 类型列包含以下 JSON,

记录#1 :-

{
  "key1": "value1",
  "key2": "value2",
  "audience": [
    {
      "name": "Person1",
      "email": "test1@mail.com",
      "country": "UK",
      "primaryNumber": "+1234567890",
      "secondaryNumber": "+1234567890"
    },
    {
      "name": "Person2",
      "email": "test2@mail.com",
      "country": "UK",
      "primaryNumber": "+1234567890",
      "secondaryNumber": "+1234567890"
    }
  ]
}

记录#2:-

{
  "key1": "value1",
  "key2": "value2",
  "audience": [
    {
      "name": "Person3",
      "email": "test3@mail.com",
      "country": "UK",
      "primaryNumber": "+1234567890",
      "secondaryNumber": "+1234567890"
    },
    {
      "name": "Person4",
      "email": "test4@mail.com",
      "country": "UK",
      "primaryNumber": "+1234567890",
      "secondaryNumber": "+1234567890"
    }
  ]
}

预期结果(获取所有受众):-

[
  {
    "name": "Person1",
    "email": "test1@mail.com",
    "country": "UK",
    "primaryNumber": "+1234567890",
    "secondaryNumber": "+1234567890"
  },
  {
    "name": "Person2",
    "email": "test2@mail.com",
    "country": "UK",
    "primaryNumber": "+1234567890",
    "secondaryNumber": "+1234567890"
  },
  {
    "name": "Person3",
    "email": "test3@mail.com",
    "country": "UK",
    "primaryNumber": "+1234567890",
    "secondaryNumber": "+1234567890"
  },
  {
    "name": "Person4",
    "email": "test4@mail.com",
    "country": "UK",
    "primaryNumber": "+1234567890",
    "secondaryNumber": "+1234567890"
  }
]

任何人都可以 帮助我设计 查询 native query 或通过 spring-data-jpa 吗?

如果有人能帮助我摆脱这种情况,我真的很感激!

您应该使用 jsonb_array_elements() 提取每行的 'audience' 数组元素,并使用 jsonb_agg():

将它们聚合到单个 json 对象
select jsonb_agg(value)
from my_table
cross join jsonb_array_elements(json_data->'audience')

Working example in rextester.