使用Postgres查询访问JSON内部的数组

时间:2020-02-20 23:04:01

标签: json postgresql

我有一个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"}]

我尝试使用->>#>>运算符,但是他们都抱怨数组不是以{开头。同样值得注意的是,该列是JSON而不是JSONB的数据类型,因此@>运算符不起作用。

我在这里想念什么?

1 个答案:

答案 0 :(得分:1)

这有帮助吗?

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 
  ;

产品代码

“ PRODUCT-1”
“ PRODUCT-2”