У меня есть файл JSON, как показано ниже.
{
"pr": {
"nv": "1234.0.0.234",
"ps": [{
"nv": "1234.1.1.235",
"fh": [{
"nv": ""
},
{
"nv": ""
}
]
},
{
"nv": "1234.102.000.579",
"fh": [{
"nv": ""
},
{
"nv": ""
}
]
},
{
"nv": "1234.103.000.111",
"fh": [{
"nv": ""
},
{
"nv": ""
}
]
},
{
"nv": "1234.104.000.134",
"fh": [{
"nv": ""
},
{
"nv": ""
}
],
"SP": [{
"nv": "1234.105.000.245",
"fh": [{
"nv": ""
},
{
"nv": ""
}
]
},
{
"nv": "1234.106.000.306",
"fh": [{
"nv": ""
},
{
"nv": ""
}
]
}
]
}
],
"pr": {
"nv": "2234.000.000.115",
"ps": [{
"nv": "1234.1.1.235",
"fh": [{
"nv": ""
},
{
"nv": ""
}
]
},
{
"nv": "2234.102.000.579",
"fh": [{
"nv": ""
},
{
"nv": ""
}
]
},
{
"nv": "2234.103.000.111",
"fh": [{
"nv": ""
},
{
"nv": ""
}
]
},
{
"nv": "2234.104.000.134",
"fh": [{
"nv": ""
},
{
"nv": ""
}
],
"SP": [{
"nv": "2234.105.000.245",
"fh": [{
"nv": ""
},
{
"nv": ""
}
]
},
{
"nv": "2234.106.000.306",
"fh": [{
"nv": ""
},
{
"nv": ""
}
]
}
]
}
]
}
}
}
Я хочу прочитать версии зависимостей данной версии. Например, если я предоставляю версию 2234.106.000.306, он должен вернуть массив значений
[1234.0.0.234,2234.000.000.115,2234.104.000.134,2234.106.000.306].
Я могу сделатьэто с помощью цикла foreach. Но я хотел бы знать, есть ли какой-либо другой лучший способ добиться этого
$tv = "1234.106.000.306"
$dv = @()
function Processependency($splist) {
foreach ($ps in $splist) {
if ($ps.nv -eq $tv) {
$dv += $ps.nv
return $dv
}
foreach ($fh in $ps.fh) {
if ($fh.nv -eq $tv) {
$dv += $fh.nv
return $dv
}
}
foreach ($SP in $ps.SP) {
if ($SP.nv -eq $tv) {
$dv += $ps.nv
$dv += $SP.nv
return $dv
}
}
}
}
$JsonFile = Get-Content -Raw -Path $Filepath | ConvertFrom-Json
foreach ($pr in $JsonFile.pr) {
$dv += $pr.nv
if ($pr.nv -eq $tv) {
return ($dv)
} else {
$dv = Processependency($pr.ps)
}
}