我有一个data_type
中json
的表,我需要查询其中的一个属性。
此列中的数据如下所示:
{
"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
的数据类型,因此@>
运算符不起作用。
我在这里想念什么?
答案 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”