json - 使用 PowerShell 将成员附加到 JSON 中的数组
问题描述
我需要使用 Powershell 将数据插入到数组中的 json 文件中。这是json原始结构
{
"Array": [
{
"servername": "foo"
},
{
"servername": "boo"
}
]
}
这是新的结构:
{
"Array": [
{
"servername": "Foo",
"Disk": "100"
},
{
"servername": "Boo",
"Disk": "500"
}
]
}
为什么这不起作用?
$json = @"
{
"Array": [
{
"servername": "Foo"
},
{
"servername": "Boo"
}
]
}
"@
$jsonServerFoo=@"
{
"Disk": "100"
}
"@
$jsonServerBoo=@"
{
"Disk": "500"
}
"@
$jsonObj = $JSON | ConvertFrom-Json
$jsonServerFooObj = $jsonServerFoo | ConvertFrom-Json
$jsonServerBooObj = $jsonServerBoo | ConvertFrom-Json
$i = 1
$jsonObj.Array | Foreach-object {
if ( $i -eq 1 ) {
$_ | Add-Member -MemberType NoteProperty -Name "Disk" -Value $jsonServerFooObj.Disk
$i++
}
else {
$_ | Add-Member -MemberType NoteProperty -Name "Disk" -Value $jsonServerBooObj.Disk
}
}
$jsonObj
$jsonObj | ConvertTo-Json -Depth 100
我得到了想要的输出
{
"Array": [
{
"servername": "Foo",
"Disk": "100"
},
{
"servername": "Boo",
"Disk": "500"
}
]
}
解决方案
用于Add-Member
将成员添加到PSCustomObject
. ConvertFrom-Json
返回 a PSCustomObject
,而不是 a Hashtable
。
$jsonObj | Add-Member -MemberType NoteProperty -MemberName MyPropertyName -Value "some value, doesn't have to be a string"
您也不必使用基础$jsonObj
,您也可以将成员添加到嵌套成员中$jsonObj
。在您的情况下,与Array
成员:
$jsonObj.Array | Foreach-object {
if( $i -eq 1 ) {
$_ | Add-Member -MemberType NoteProperty -Name Disk -Value $jsonServerFooObj.Disk
$i++
} else {
$_ | Add-Member -MemberType NoteProperty -Name Disk -Value $jsonServerBooObj.Disk
}
}
您可能还想考虑调用ConvertTo-Json -Depth 100
,这样您就不会得到默认的对象深度,我认为它很低,3。
正如@user2864740 所指出的,如果您更愿意使用 a 而不是 a ,则在 PowerShell 6ConvertFrom-Json
中具有参数。-AsHashtable
Hashtable
PSCustomObject
推荐阅读
- apache-spark - 加载数据以通过 spark 点燃
- c# - 如何以编程方式注册 Nlog 扩展/布局渲染器(NLog.Web.AspNetCore)?
- keras - LSTM 3D 输入 3D 输出尺寸不匹配
- java - 在 LeanFT 中将 DynamicObjectProxy 转换为 Object[]
- java - 如何找到聚类的最佳 K?
- javascript - Angular,如何使用基于布尔值的指令
- spring-boot - 当 JBOSS EAP 启动时,Spring boot webservice 启动并被发现
- android - 错误:清单合并失败并出现多个错误,请参阅日志 | 但日志中没有错误
- ios - captureOutput() 函数永远不会被调用 swift4
- javascript - 函数完成后如何执行代码