arrays - 具有多级数组的powershell csv到json
问题描述
目前我正在从平面 CSV 中获取数据并将其转换为 json。我可以使用下面的三个数组将其降低两级
CSV 文件包含以下数据。我为实现上述目的而编写的代码是使用数组、powershell 对象和 convertto-json
$ArrayAPPName = @()
$ArrayAPProles = @()
$Arrayserver= @()
$i = 0
foreach ($item in $CSV) {
if ($i -eq 0) {
$JSONappname = $($item.'AppName')
$JSONapprole = $($item.'ROLE')
}
if ($($item.'AppName') -ne $JSONappname) {
$ArrayAPPName += [pscustomobject]@{
AppName = $JSONappname;
Roles = $ArrayJSONroles
}
}
$ArrayJSONserver = [pscustomobject]@{
CPU = $item.CPU;
RAM = ([int]$item.Memory);
}
if ($($item.'AppName') -eq $JSONappname)
{
[array]$ArrayJSONroles += [pscustomobject]@{
Role = $($item.'ROLE');
Server = $ArrayJSONserver
}
}
else {
[array]$ArrayJSONroles = [pscustomobject]@{
Role = $($item.'ROLE');
Server = $ArrayJSONserver
}
}
$JSONappname = $($item.'AppName')
$i++
}
$ArrayAPPName += [pscustomobject]@{
Name = $JSONappname;
Roles= $ArrayJSONroles
}
$ArrayAPPName = [pscustomobject]@{
Apps = $ArrayAPPName | Select-Object -Property Name, Roles
}
$ArrayAPPName = $ArrayAPPName | ConvertTo-Json -Depth 10
但是,现在我们遇到了相同角色可以有多个服务器请求的情况。因此对于每个应用程序名称,我们可以有多个应用程序角色,对于每个应用程序角色,我们可以有多个服务器。
{
"Apps": [
{
"AppName": "ABC",
"Roles": [
{
"Role": "App",
"Server": [
{
"CPU": "2",
"Memory": "1024",
},
{
"CPU": "2",
"Memory": "2084",
}
]
}
]
}
]
}
解决方案
推荐阅读
- sql - 计算两天内表的列之间的差异
- python - mysql查询不更新同一条记录
- ada - Ada 是如何访问 Windows 8.1/10 API 的,能否生成 Windows 的 64 位程序?
- angular - 如何在角度6中以数组格式存储字符串值对
- ruby-on-rails - 检查rails数据库中的数据是否为空时出现问题
- python - 如果列表具有相同出现的项目,则使用 list.count 的 Python 排序列表不起作用
- python - Python:ValueError:list.remove(x):x不在列表中
- python - read_csv 获取发生异常的行
- apache - 带有 apache 和 nginx 的 Kestrel 服务器反向代理
- assembly - 寻址寄存器所需的位