[英]How do I select all from a nested array of JSON objects?
我有一個 PostgreSQL 表,每一行都包含 JSON 對象,看起來像這樣:
{
"Metadata":{
...
},
"NestedArray":[
{
...,
...,
"Coordinates":[
{
"id":"1000",
"X":"...",
"Y":"..."
},
{
"id":"1001",
"X":"...",
"Y":"..."
},
{
"id":"1003",
"X":"...",
"Y":"..."
}
]
}
]
}
所以每個對象都包含一個NestedArray
,它包含另一個名為Coordinates
嵌套數組。
MyObject.NestedArray[].Coordinates[]
我想要做的是在我的 PostgreSQL 表中查詢一個 JSON 列,該列包含諸如上述對象的對象,並獲得所有Coordinates
對象的結果集。
所以這基本上就是我想要的結果:
ID | X | 是 |
---|---|---|
1001 | . | . |
1002 | . | . |
1003 | . | . |
1004 | . | . |
1005 | . | . |
1006 | . | . |
我該怎么做?
我認為 jsonb_array_elements() 在這種情況下不起作用,因為有兩個嵌套級別的 json 數組。 這應該進行測試:
SELECT r.item ->> 'id' as id
, r.item ->> 'X' as X
, r.item ->> 'Y' as Y
FROM your_table
CROSS JOIN LATERAL jsonb_path_query(your_json_column :: jsonb, '$.NestedArray[*].Coordinates[*]') AS r(item)
您需要取消嵌套數組,然后您可以使用->>
運算符訪問每個鍵:
select e.item ->> 'id' as id,
e.item ->> 'x' as x,
e.item ->> 'y' as y
from the_table
cross join jsonb_array_elements(the_column -> 'NestedArray' -> 'Coordinates') as x(item)
這假設the_column
是用數據類型jsonb
(應該是)定義的。 如果不是使用json_array_elements()
代替。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.