如果值匹配,我想从json数组(PSObject)中删除数组元素:
$code = 12345
$myObject = @{ ArrayPair= @(@{ code = 12345; perm = "RW" }, @{ code = 23456; perm = "RW" })}
if ($true) { # $revoke
$myObject.ArrayPair = $myObject.ArrayPair | Where-Object -FilterScript {$_.code -ne $code}
}
开始时,ArrayPair具有2个数组元素,执行过滤器后,ArrayPair不再是数组,而是具有两个元素的对象。如何将其保留为数组,以便可以继续向数组中添加新对?
删除前后的json值: 取值前:
{"ArrayPair": [{"perm": "RW","code": 12345},{"perm": "RW","code": 23456}]}
取值后
{"ArrayPair": { "perm": "RW", "code": 23456 }}
答案 0 :(得分:0)
您可以强制对象保留如下数组:
var query = @"select * from tblAWS
where Code = '3.' + @code
and GlbUniqueID= @customerCode";
SqlCommand com = new SqlCommand(query, conn);
com.Parameters.Add("@code", txtCode.Text);
....
要将其他条目添加到您的阵列中,您必须像这样尝试:
$code = 12345
$myObject = @{ ArrayPair= @(@{ code = 12345; perm = "RW" }, @{ code = 23456; perm = "RW" })}
[array]$myObject.ArrayPair = $myObject.ArrayPair | Where-Object -FilterScript {$_.code -ne $code}
$myObject.ArrayPair.GetType()
#Returns
#IsPublic IsSerial Name BaseType
#-------- -------- ---- --------
#True True Object[] System.Array
这样,您可以将条目添加到数组,结果如下:
$myObject.ArrayPair += @{code = 2134; perm= "RR"}
请注意,PS C:\> $myObject.ArrayPair
Name Value
---- -----
code 23456
perm RW
code 2134
perm RR
并没有真正将对象添加到数组,而是使用新值重新创建了数组。
如果尝试通过+=
添加对象,则会出现错误。
请查看此答案以获取更多说明: PowerShell Array.Add vs +=
答案 1 :(得分:0)
我在删除元素(如果仅剩一个元素的时候)的时候,发现必须加倍强制对象以确保它仍然是数组类型:
[array]$temp = $result.data.app.roles.admin | Where-Object -FilterScript {$_.club -ne $ClubNo}
$result.data.app.roles.admin = [array]($temp)