簡體   English   中英

如何從嵌套的 JSON 對象數組中選擇所有對象?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM