【问题标题】:PowerShell ConvertFrom-Json ignores top-level array?PowerShell ConvertFrom-Json 忽略顶级数组?
【发布时间】:2019-05-10 15:36:18
【问题描述】:

我正在尝试使用 ConvertFrom-Json 解析 JSON 数组,但如果它位于顶层,PowerShell 似乎会忽略该数组。

例如,这会意外返回 count = 1:

'[{a:1},{b:2}]' | ConvertFrom-Json | measure

但是当我将 JSON 数组放入一个对象时,它似乎按预期进行了解析。这将返回 count = 2

('{list:[{a:1},{b:2}]}' | ConvertFrom-Json).list | measure

如果ConvertFrom-Json 不适用于 JSON 数组,是否有替代方案?

【问题讨论】:

    标签: json powershell


    【解决方案1】:

    '[{a:1},{b:2}]' | ConvertFrom-Json | measure

    您所做的是测量管道返回的对象数量。管道返回一个包含 2 个对象的数组,而不是 2 个对象。

    如果你想要数组中的东西的数量,你可以这样做:

    ('[{a:1},{b:2}]' | ConvertFrom-Json).Count

    在第二个示例中,PowerShell 展开列表以获取其中的项目(正常的 PowerShell 管道行为)。

    【讨论】:

    • 是的。这与 ,@(1,2,3) | Measure-Object@(1,2,3) | Measure-Object 相同。
    • 我不同意“PowerShell 正在展开列表以获取其中的项目(正常的 PowerShell 管道行为)”,因为添加括号不是“正常的”。这是一个额外的步骤,这不是您期望括号在任何其他语言中做的事情。我什至不知道我将如何谷歌搜索解释这种括号行为的 Microsoft 文档。它当然不在 ConvertFrom-Json 文档中,尽管它确实应该在。不过,+1 向我展示了语法。
    • Bacon Bits 的前导逗号与括号中的那种神秘的“我怎么会期望那样”的语法行为相同。这些是糟糕的语言设计的标志。
    • @LinuxDisciple - PowerShell 会定期在管道上展开数组。括号并没有导致这种情况,它们是通过将东西收集在一起来“消除”这种情况。
    猜你喜欢
    • 1970-01-01
    • 2018-03-18
    • 2015-08-09
    • 2015-03-20
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    相关资源
    最近更新 更多