首页 > 解决方案 > 使用 Postgres 查询访问 JSON 中的数组

问题描述

我有一张表data_typejson我需要查询其中的一个属性。

列中的数据如下所示:

{
  "id": 7008,
  "access_links": [
    {
      "product_code": "PRODUCT-1",
      "link": "https://some.url"
    },
    {
      "product_code": "PRODUCT-2",
      "link": "https://someOther.url"
    }
  ],
  "library_id": "2d1203db-75b3-43a5-947c-8555b48371db"
}

我需要能够通过product_code嵌套在access_links.

我可以通过使用此查询获得一层深度:

SELECT
    courses.course_metadata -> 'access_links' as access_links 
FROM
    courses

这似乎让我进入了专栏,但我无法进一步查询。

我从查询中收到的输出如下所示:

[{"product_code":"PRODUCT-1","link":"https://some.url"},{"product_code":"PRODUCT-2","link":"https://someOther.url"}]

我试过使用->>and#>>运算符,但他们都抱怨数组不是以{. 另外值得注意的是,该列是JSONnot的数据类型JSONB,因此@>运算符不起作用。

我在这里想念什么?

标签: jsonpostgresql

解决方案


这有帮助吗?

select 
json_array_elements (x->'access_links')->'product_code' as product_code
from 
(select '{
  "id": 7008,
  "access_links": [
    {
      "product_code": "PRODUCT-1",
      "link": "https://some.url"
    },
    {
      "product_code": "PRODUCT-2",
      "link": "https://someOther.url"
    }
  ],
  "library_id": "2d1203db-75b3-43a5-947c-8555b48371db"
}'::json x 
  )  as v 
  ;

产品代码

“产品-1”
“产品-2”


推荐阅读