【问题标题】:How to insure json stays array如何确保json保持数组
【发布时间】:2019-05-18 11:53:30
【问题描述】:

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

【问题讨论】:

    标签: arrays powershell


    【解决方案1】:

    你可以强制对象保持这样的数组:

    $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
    

    请注意+= 并没有真正将对象添加到数组中,而是使用新值重新创建数组。 如果您尝试通过$myObject.ArrayPair.Add(@{code = 2134; perm= "RR"}) 添加对象,则会收到错误消息。

    请查看此答案以获得进一步的解释: PowerShell Array.Add vs +=

    【讨论】:

      【解决方案2】:

      如果只剩下一个元素,我在删除元素时,我发现我必须加倍强制该对象以确保它仍然是数组类型:

      [array]$temp = $result.data.app.roles.admin | Where-Object -FilterScript {$_.club -ne $ClubNo}
      $result.data.app.roles.admin = [array]($temp)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-13
        • 1970-01-01
        • 1970-01-01
        • 2017-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多