簡體   English   中英

使用PowerShell嵌套JSON

[英]Nested JSON using PowerShell

我的JSON看起來像這樣:

{
  "data": [
    {
      "name": "engagement",
      "period": "lifetime",
      "values": [
        {
          "value": 52
        }
      ],
      "title": "Engagement",
      "description": "Total number of likes and comments on the media object",
      "id": "1798601712/insights/engagement/lifetime"
    },
    {
      "name": "impressions",
      "period": "lifetime",
      "values": [
        {
          "value": 796
        }
      ],
      "title": "Impressions",
      "description": "Total number of times the media object has been seen",
      "id": "1798601712/insights/impressions/lifetime"
    }
  ]
}

我目前設法實現的目標:

"1798601712/insights/engagement/lifetime","engagement","52"
"1798601712/insights/impressions/lifetime","impressions","796"
"1798601712/insights/reach/lifetime","reach","422"

使用以下代碼:

$Ident = Import-Csv -Path ".\src\Process.txt" -Header $Header |
         Select-Object -Skip 2
foreach ($idka in $ident) {
    $sid = $idka.id
    $request_n = "https://api/"+ $sid +"/data=20190101&file=json"
    foreach($dane1 in $request_n) {
        Invoke-WebRequest $dane1 |
            ConvertFrom-Json |
            Select -ExpandProperty data |
            Select id, name, @{label = "values";Expression ={$_.values.value}} |
            Export-Csv $filename -NoTypeInformation -Append
    }
}

我需要我的csv看起來像這樣:

id  engagement  impressions reach
1798601712  52  796 422
1786717942  34  428 346
1787997335  29  376 281
1788199840  30  532 439
1788311007  48  1053 867
1788353947  28  609 497
1788403484  43  809 460

擴展data數組組后,將按照您從id字段中提取的ID嵌套對象。 對於每個組,構建一個哈希表,您可以在其中將每個嵌套對象的值映射到它們的name屬性。 從哈希表創建一個自定義對象,然后將結果導出到輸出CSV。

...|
Select-Object -Expand data |
Group-Object { $_.id.Split('/')[0] } |
ForEach-Object {
    $prop = @{
        'id' = $_.Name
    }
    $_.Group | ForEach-Object {
        $prop[$_.name] = $_.values.value
    }
    New-Object -Type PSObject -Property $prop
} |
Select-Object id, engagement, impressions, reach |
Export-Csv $filename -NoType -Append

請注意,在PowerShell v3或更高版本中,您可以使用有序哈希表和[PSCustomObject]類型的加速器,而不是New-Object ,這將允許您省略最后一個Select-Object (其唯一目的是按所需順序獲取輸出字段) )。

暫無
暫無

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

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