下面有两个数组。
# 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,如下所示。
#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数组,并生成结果数组,如下所示。
#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"
},
]
}我希望将testId与id匹配,并生成结果数组。我想在$MyResultArray2.testId中搜索$MyResultArray1,并在$MyResultArray1中添加新的字段"testResult“。
我对Powershell非常陌生,我不知道它是如何在Powershell中完成的。
我能够迭代数组,但不能搜索和创建新对象。
发布于 2022-07-09 14:40:13
下面是一些代码,可以做您想做的事情,但是返回一个新的数组。如果它不能在一个新的数组中,请告诉我。另外,这将适用于在两个数组中ID不一致的JSON数据。
首先,您必须使用Convert-FromJson将数据从JSON转换为PS对象。在那之后,它实际上只是遍历其中的一个数组。
由于大部分数据来自第一个数组,所以我将遍历该数组。我必须选择$obj1.values,因为$obj1是一个具有数组的对象,其中$obj1.values是值数组。
在这里,您将使用Where-Object在其他数组中找到给定迭代的相应值。
所有这些数据都进入到一个PS自定义对象中,然后将其推送到数组中以得到答案。
# 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}
#>希望这能帮上忙。如果你需要更多的东西,请告诉我:)
https://stackoverflow.com/questions/72921265
复制相似问题