查询 JSONB 中的对象数组

Querying an array of objects in JSONB

我有一个 table,其列的数据类型为 JSONB。该列中的每一行都有一个 JSON,看起来像这样:

[
  {
    "A":{
      "AA": "something",
      "AB": false
    }
  },
  {
    "B": {
      "BA":[
        {
          "BAAA": [1,2,3,4]
        },
        {
          "BABA": {
           .... 
          }
        }
      ]
    }
  }
]

注:JSON是一团乱七八糟的列表和对象,一共300行。不是我的数据,但我坚持使用它。 :(

我正在使用 postgresql 版本 12

我将如何编写以下查询:

您可以使用 JSON 路径查询找到 AB = false 行:

select *
from test
where data @@ '$[*].A.AB == false'

如果您不知道密钥 AB 的确切位置,您可以使用:

select *
from test
where data @@ '$[*].**.AB == false'

要将数组中的所有元素显示为行,您可以使用:

select id, e.*
from test
  cross join jsonb_array_elements(jsonb_path_query_first(data, '$[*].B.BA.BAAA')) with ordinality as e(item, idx)

我包含一个“id”列作为主键列的占位符,以便可以在输出中确定数组元素的来源。

Online example