我正在尝试通过 PowerShell 解析此 JSON 内容:
gc .\release.json | ConvertFrom-Json
Run Code Online (Sandbox Code Playgroud)
release.json将有类似的内容如下:
{
"source": 2,
"id": 3487,
"environments": [
{
"id": 11985,
"variables": {
"Var1": { "value": "val1" },
"Var2": { "value": "val2" },
"var3": { "value": "val3" }
}
},
{
"id": 13797,
"variables": {
"Var1": { "value": "val1" },
"Var2": { "value": "val2" },
"var3": { "value": "val3" },
"var4": { "value": "val4" }
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
为了获得如下所示的输出,我可以在每个环境中拥有许多变量,并且可以拥有多个环境。最终我需要将其导入 Excel 并进行分析。
小智 5
如果您想按值名称行进行分组,则不是那么简单。我冒昧地为你思考了逻辑。下面的代码会将您需要的内容输出到 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6894 次 |
| 最近记录: |