Powershell:引用嵌套JSON数组中的值

时间:2017-07-17 03:54:25

标签: arrays json powershell

我正在尝试使用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但是我需要它只是循环通过与我正在循环的项目相关的自定义字段,如果这有任何意义?

1 个答案:

答案 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
    }
}