如何确保json保持数组

时间:2018-12-18 05:02:34

标签: arrays powershell

如果值匹配,我想从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 }}

2 个答案:

答案 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)