2017-07-17 93 views
0

我試圖使用powershell與使用Invoke-RestMethod函數的api進行通信。Powershell:引用嵌套的JSON數組中的值

從我可以告訴這個返回作爲一個PowerShell對象(數組)的JSON響應。結果有兩個級別是項目列表,然後是針對這些項目設置的自定義字段。

我想循環每個項目,然後通過項目的每個自定義字段,然後使用此信息執行各種SQL操作。

目前我很苦惱,我可以使用ForEach循環通過作爲項目的頂級「數據」,但是當我嘗試循環通過項目的自定義字段時,它實際上循環遍歷所有所有項目的自定義字段。

我已經使用我有限的PowerShell和許多小時的搜索和閱讀經驗得到了這麼多。不過,我確信我只是不理解整個概念,希望這只是一個簡單的問題,我試圖引用數據...

這是api響應的一個示例。

"TotalPages":1, "TotalRecords":2, "Data":[ 
      { 
         "code":"00000014", 
         "description":"Digital Strategy", 
         "customFieldValues":[ 
            { 
               "key":135, 
               "name":"Department", 
               "value":"Sales" 
            } 
         ] 
      }, 
      { 
         "code":"T3FA", 
         "description":"Survey coding", 
         "customFieldValues":[ 
            { 
               "key":135, 
               "name":"Department", 
               "value":"Finance" 
            } 
         ] 
      }    ] } 

這是我簡單的代碼來循環響應。

$APIResponse = Invoke-RestMethod -Uri $Uri -Headers $Headers 

ForEach ($d in $APIResponse.data) { 
    "Project Code = " + $d.code + ", Project Description = " + $d.description 
    ForEach ($e in $APIResponse.data.customFieldValues) { 
     "CustomField Key " + $e.key + ", Name " + $e.name + ", Value " + $e.value 
    } 
} 

我想這是做什麼,它是被要求做的,它的循環遍歷所有customFieldValue但我需要它只是通過與我目前通過,如果循環項目中的自定義字段循環這有什麼意義?

回答

1

好吧我不知道我以前怎麼沒有找到這個,但一些試驗和錯誤導致我看到這似乎工作得很好。

在第二的ForEach我換成$ APIResponse.data.customFieldValues$ d.customFieldValues這似乎讓它看起來只通過當前選定的項目。

$APIResponse = Invoke-RestMethod -Uri $Uri -Headers $Headers 

ForEach ($d in $APIResponse.data) { 
    "Project Code = " + $d.code + ", Project Description = " + $d.description 
    ForEach ($e in $d.customFieldValues) { 
     "CustomField Key " + $e.key + ", Name " + $e.name + ", Value " + $e.value 
    } 
}