2017-07-17 90 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 
    } 
}