PowerShell解析JSON
我正在尝试通过PowerShell解析此JSON内容:PowerShell解析JSON,json,powershell,Json,Powershell,我正在尝试通过PowerShell解析此JSON内容: gc.\release.json |从json转换 release.json将包含以下类似内容: { “来源”:2, “id”:3487, “环境”:[ { “id”:11985, “变量”:{ “Var1”:{“value”:“val1”}, “Var2”:{“value”:“val2”}, “var3”:{“value”:“val3”} } }, { “id”:13797, “变量”:{ “Var1”:{“value”:“val1”}
gc.\release.json |从json转换
release.json
将包含以下类似内容:
{
“来源”:2,
“id”:3487,
“环境”:[
{
“id”:11985,
“变量”:{
“Var1”:{“value”:“val1”},
“Var2”:{“value”:“val2”},
“var3”:{“value”:“val3”}
}
},
{
“id”:13797,
“变量”:{
“Var1”:{“value”:“val1”},
“Var2”:{“value”:“val2”},
“var3”:{“value”:“val3”},
“var4”:{“value”:“val4”}
}
}
]
}
要获得如下所示的输出,我可以在每个环境中有许多变量,也可以有多个环境。最终,我需要把它带到Excel并进行分析
如果您想按值名称的行进行分组,那么就不要这么直截了当了。我冒昧地为你考虑了逻辑。以下代码将输出到您需要的csv:
$jsonContent = Get-Content .\release.json | ConvertFrom-Json;
$environmentsArray = $jsonContent.environments;
# Create an array of data we will be putting into Excel
$arrData = @();
$columnNames = @();
$rowNames = @();
# Go through each "environments" property item in json and add "id" property to $columnNames without duplicates
for ($i=0; $i -lt $environmentsArray.Count; $i++) {
[bool]$existingColumnNameFound = $false;
foreach($existingCol in $columnNames) {
if($existingCol -eq $environmentsArray[$i].id) {
$existingColumnNameFound = $true;
}
}
if($existingColumnNameFound -eq $false) {
$columnNames += $environmentsArray[$i].id;
}
# go through each property in environments.variables property in json and add these properties to $rowNames without duplicates
$environmentsArray[$i].variables.psobject.properties | foreach {
[bool]$existingRowNameFound = $false;
foreach($existingRow in $rowNames) {
if($existingRow -eq $_.name) {
$existingRowNameFound = $true;
break;
}
}
if($existingRowNameFound -eq $false) {
$rowNames += $_.name;
}
}
}
foreach($existingRow in $rowNames) {
$objRowItem = New-Object System.Object;
$objRowItem | Add-Member -MemberType NoteProperty -Name "ValueName" -Value $existingRow;
# Create all columns for each row object
foreach($existingCol in $columnNames) {
$objRowItem | Add-Member -MemberType NoteProperty -Name $existingCol -Value "";
}
foreach($existingCol in $columnNames) {
# Populate the column in row object we are adding to $arrData
for ($i=0; $i -lt $environmentsArray.Count; $i++) {
$environmentsArray[$i].variables.psobject.properties | foreach {
# If json data "id" property and the value property name equal, add value to column
if(($_.name -eq $objRowItem.ValueName) -and ($existingCol.ToString() -eq $environmentsArray[$i].id.ToString())) {
$objRowItem.$existingCol = $_.value.value;
}
}
}
}
# Add this object containing columns to $arrData
$arrData += $objRowItem;
}
# Convert this data to CSV
$arrData | ConvertTo-Csv -NoTypeInformation -Delimiter "," | % {$_ -replace '"',''} | Out-File .\output.csv
结果:
你的问题是什么?