首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于生成的Powershell合并两个数组并生成结果数组

基于生成的Powershell合并两个数组并生成结果数组
EN

Stack Overflow用户
提问于 2022-07-09 12:11:50
回答 1查看 65关注 0票数 0

下面有两个数组。

代码语言:javascript
复制
# My First request
$MyResultArray1 = Invoke-RestMethod -Uri "http://myhost/rest-api-1" -Method GET -ErrorAction 'Stop'

# My Second request
$MyResultArray2 = Invoke-RestMethod -Uri "http://myhost/rest-api-2" -Method GET -ErrorAction 'Stop'

这两个请求都返回JSON,如下所示。

代码语言:javascript
复制
#Array 1 - $MyResultArray1
{
  "values": [
    {
       "id": 1,
       "testType": "something1"
    },
    {
       "id": 2,
       "testType": "something2"
    },
    {
       "id": 3,
       "testType": "something3"
    }
  ]
}

#Array 2 - $MyResultArray2
{
  "values": [
    {
       "testId": 1,
       "testResult": "result1",
       "testMeta": {}
    },
    {
       "testId": 2,
       "testResult": "result2",
       "testMeta": {}
    },
    {
       "testId": 3,
       "testResult": "result3",
       "testMeta": {}
    }
  ]
}

我希望基于ID合并这些JSON数组,并生成结果数组,如下所示。

代码语言:javascript
复制
#Array 3 - $Result
{
  "result": [
    {
       "id": 1,                  <-- From Array#1
       "testType": "something1"  <-- From Array#1
       "testResult": "result1"   <-- From Array#2
    },
    {
       "id": 2,
       "testType": "something2"
       "testResult": "result2"
    },
    {
       "id": 3,
       "testType": "something3"
       "testResult": "result3"
    },
  ]
}

我希望将testIdid匹配,并生成结果数组。我想在$MyResultArray2.testId中搜索$MyResultArray1,并在$MyResultArray1中添加新的字段"testResult“。

我对Powershell非常陌生,我不知道它是如何在Powershell中完成的。

我能够迭代数组,但不能搜索和创建新对象。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-09 14:40:13

下面是一些代码,可以做您想做的事情,但是返回一个新的数组。如果它不能在一个新的数组中,请告诉我。另外,这将适用于在两个数组中ID不一致的JSON数据。

首先,您必须使用Convert-FromJson将数据从JSON转换为PS对象。在那之后,它实际上只是遍历其中的一个数组。

由于大部分数据来自第一个数组,所以我将遍历该数组。我必须选择$obj1.values,因为$obj1是一个具有数组的对象,其中$obj1.values是值数组。

在这里,您将使用Where-Object在其他数组中找到给定迭代的相应值。

所有这些数据都进入到一个PS自定义对象中,然后将其推送到数组中以得到答案。

代码语言:javascript
复制
# Array 1 - $MyResultArray1
$obj1 = '{
  "values": [
    {
       "id": 1,
       "testType": "something1"
    },
    {
       "id": 2,
       "testType": "something2"
    },
    {
       "id": 3,
       "testType": "something3"
    }
  ]
}' | ConvertFrom-Json

# Array 2 - $MyResultArray2
$obj2 = '{
  "values": [
    {
       "testId": 1,
       "testResult": "result1",
       "testMeta": {}
    },
    {
       "testId": 2,
       "testResult": "result2",
       "testMeta": {}
    },
    {
       "testId": 3,
       "testResult": "result3",
       "testMeta": {}
    }
  ]
}' | ConvertFrom-Json

$newArr = @()


foreach ($value in $obj1.values) {
    $newObj = [pscustomobject]@{
        id = $value.id
        testType = $value.testType
        testResult = ($obj2.values | Where-Object { $_.testId -eq $value.id }).testResult
    }

    $newArr += $newObj
    #$value.testResult = $obj2.values | Where-Object { $_.testId -eq $value.id }
}

Write-Host $newArr
<#
    @{id=1; testType=something1; testResult=result1}
    @{id=2; testType=something2; testResult=result2} 
    @{id=3; testType=something3; testResult=result3}
#>

希望这能帮上忙。如果你需要更多的东西,请告诉我:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72921265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档