我正在尝试使用powershell使用Invoke-RestMethod函数与api进行通信。
据我所知,这将JSON响应作为powershell对象(数组)返回。结果有2个级别是项目列表,然后是针对这些项目设置的自定义字段。
我试图遍历每个项目,然后遍历项目的每个自定义字段,然后使用此信息执行各种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但是我需要它只是循环通过与我正在循环的项目相关的自定义字段,如果这有任何意义?
答案 0 :(得分:1)
好吧,我不确定我之前是怎么发现的,但是有些试错导致我看起来效果不错。
在第二个ForEach中,我用 $ d.customFieldValues 替换了 $ APIResponse.data.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
}
}