簡體   English   中英

展平 Powershell Object 中的子陣列,包括父 object 屬性

[英]Flattening a Sub-Array in a Powershell Object, including parent object property

給定以下 JSON

[
  {
    "key": "James",
    "things": [
      {
        "id": 123,
        "name": "PRD"
      },
      {
        "id": 124,
        "name": "PRE"
      }
    ]
  },
  {
    "key": "Susan",
    "things": [
      {
        "id": 125,
        "name": "PRF"
      },
      {
        "id": 126,
        "name": "PRG"
      }
    ]
  }
]

其中,我很容易轉換成 Powershell object:

$json = '[{"key":"James", "things":[{"id":123,"name":"PRD"},{"id":124,"name":"PRE"}]},{"key":"Susan", "things":[{"id":125,"name":"PRF"},{"id":126,"name":"PRG"}]}]'

$obj = $json | ConvertFrom-Json 

如何展平子陣列的things並包含來自父 object 的key ,以便我的結果集是

key    id name
---    -- ----
James 123 PRD  
James 124 PRE  
Susan 125 PRF
Susan 126 PRG

我使用以下方法來展平子陣列:

$obj | % { $_.things}  

哪個返回我

 id name
 -- ----
123 PRD  
124 PRE  
125 PRF
126 PRG

但是,我無法完全弄清楚下一步該做什么。

任何幫助將非常感激。

您循環到每個鍵,然后循環到每個事物,因為您希望每個事物有 1 個結果,並使用當前鍵、id 和名稱構建一個 PSObject。

這里是 go。

# initial code sample
$json = '[{"key":"James", "things":[{"id":123,"name":"PRD"},{"id":124,"name":"PRE"}]},{"key":"Susan", "things":[{"id":125,"name":"PRF"},{"id":126,"name":"PRG"}]}]'
$obj = $json | ConvertFrom-Json 

# Loop needed to flatten the object.
foreach ($i in $obj) {
    foreach ($t in $i.things) {
        [PSCustomObject]@{
            key  = $i.key
            id   = $t.id
            name = $t.name
        }
    }
}

Output

key    id name
---    -- ----
James 123 PRD
James 124 PRE
Susan 125 PRF
Susan 126 PRG

您可以使用 select 的內置展平,如下所示:

($json | ConvertFrom-Json) | Select-Object 鍵-ExpandProperty 事物

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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