将多个JSON文件读取到Powershell对象数组中,并过滤出具有相同值的属性

hall

这是我的第一次,所以让我知道我的问题安排是否有误。

我有很多JSON文件,其文件名遵循命名约定,即file1.json,file2.json等。每个文件都可能具有多个类似于以下内容的对象:

[
    {
        "Forename":  "Jim",
        "Surname":  "Cook",
        "Gender":  "M",
        "DOB":  "12-03-1994"
    },
    {
        "Forename":  "Sarah",
        "Surname":  "Parker",
        "Gender":  "F",
        "DOB":  "01-02-1983"
    },
    {
        "Forename":  "Alan",
        "Surname":  "Flemming",
        "Gender":  "M",
        "DOB":  "27-10-1989"
    }
]

在Powershell中,我想将这些JSON对象转换为Powershell对象,然后为属性选择具有相同值的对象,例如名字为“ Jim”的人。

到目前为止,我已经实现了这一点:

@(Get-ChildItem "file*.json" | %{Get-Content $_.FullName | Out-String | ConvertFrom-Json}) | Where-Object {$_.Forename -eq "Jim"}

当只有一个文件可使用时,此方法有效:

Forename Surname Gender DOB
-------- ------- ------ ---
Jim      Cook    M      12-03-1994

但是,当与多个文件一起使用时,它将失败并输出所有对象,就像忽略了Where-Object一样。结果可能如下所示:

Forename Surname  Gender DOB
-------- -------  ------ ---
Jim      Cook     M      12-03-1994
Sarah    Parker   F      01-02-1983
Alan     Flemming M      27-10-1989
Bill     Preston  M      04-07-1975
Helen    Smith    F      03-12-2001

有人可以建议我在这里做错什么,以及如何解决它才能获得正确的结果?谢谢

mklement0

问题在于,在PowerShell最高版本为v6.x的情况下,将ConvertFrom-Json(转换后的)JSON数组作为单个对象而不是逐个元素输出,这在PowerShell中是典型的。

  • PowerShell [Core] 7.0中行为已更改为与通常的元素枚举行为一致。

由于成员枚举如果(至少)其元素之一具有带值属性,这将导致整个数组得到输出Where-Object.ForeNameJim

解决方法是将力枚举,其中在最简单的情况下,通过卷绕该命令的实现ConvertFrom-Json呼叫在(...)

Get-ChildItem file*.json | ForEach-Object {
  (Get-Content -Raw $_.FullName | ConvertFrom-Json)
} | Where-Object { $_.Forename -eq "Jim" }

请注意,我已经Get-Content $_.FullName | Out-StringGet-Content -Raw $_.FullName(PSv3 +)代替,它更简洁,更有效地以单个,多行字符串的形式检索文件的内容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Ng-repeat-通过对象的常量属性过滤出具有不同值的值

来自分类Dev

如何过滤出具有匹配值的属性?

来自分类Dev

从数组中过滤出在给定键上具有相同值的对象

来自分类Dev

如何在Makefile中过滤出具有多个条件的文件?

来自分类Dev

将具有布尔值的文本文件作为对象读取到数组列表中

来自分类Dev

用下划线过滤出具有空值的数组

来自分类Dev

如何在Yii2中过滤出具有空属性的模型

来自分类Dev

如何从字典列表中过滤出具有重复键和不同值的元素?

来自分类Dev

在 swift 4 中从数组中过滤/ flatMap 出具有任何 nil 值的对象

来自分类Dev

将具有相同值的每个对象过滤到单独的数组中

来自分类Dev

c ++从具有数组属性的文件中读取对象

来自分类Dev

在Python中读取具有多个对象的JSON文件

来自分类Dev

熊猫| 将具有类似列表/数组的字段的json文件读取到布尔列

来自分类Dev

将具有指定键的数组写入和读取到 json 文件

来自分类Dev

如何使用AngularJS应用过滤器以获取JSON数组中的JSON对象中具有相同值的元素

来自分类Dev

将具有不同整数数量的文本文件读取到多个列表中

来自分类Dev

将具有多个数据节的csv文件读取到可寻址结构中

来自分类Dev

如何将具有相同最大日期的列表中的项目分组并过滤它们

来自分类Dev

Python在JSON文件中读取具有多个值的Dict

来自分类Dev

如何过滤出具有2个相似值的行?

来自分类Dev

搜索MongoDB对象数组,其中属性对于多个数组元素具有相同的值

来自分类Dev

搜索MongoDB对象数组,其中属性对于多个数组元素具有相同的值

来自分类Dev

从Python中的JSON文件将所有对象读取到列表中

来自分类Dev

将多个嵌套的JSON文件读取到Pandas DataFrame中

来自分类Dev

将多个JSon记录读取到数组

来自分类Dev

JS对象数组可过滤出数组中的值

来自分类Dev

将具有多个工作表的多个xlsx文件读取到一个R数据帧中

来自分类Dev

从具有多个条件的 Map 中过滤出结果

来自分类Dev

从具有匹配键的哈希数组中过滤出哈希

Related 相关文章

  1. 1

    Ng-repeat-通过对象的常量属性过滤出具有不同值的值

  2. 2

    如何过滤出具有匹配值的属性?

  3. 3

    从数组中过滤出在给定键上具有相同值的对象

  4. 4

    如何在Makefile中过滤出具有多个条件的文件?

  5. 5

    将具有布尔值的文本文件作为对象读取到数组列表中

  6. 6

    用下划线过滤出具有空值的数组

  7. 7

    如何在Yii2中过滤出具有空属性的模型

  8. 8

    如何从字典列表中过滤出具有重复键和不同值的元素?

  9. 9

    在 swift 4 中从数组中过滤/ flatMap 出具有任何 nil 值的对象

  10. 10

    将具有相同值的每个对象过滤到单独的数组中

  11. 11

    c ++从具有数组属性的文件中读取对象

  12. 12

    在Python中读取具有多个对象的JSON文件

  13. 13

    熊猫| 将具有类似列表/数组的字段的json文件读取到布尔列

  14. 14

    将具有指定键的数组写入和读取到 json 文件

  15. 15

    如何使用AngularJS应用过滤器以获取JSON数组中的JSON对象中具有相同值的元素

  16. 16

    将具有不同整数数量的文本文件读取到多个列表中

  17. 17

    将具有多个数据节的csv文件读取到可寻址结构中

  18. 18

    如何将具有相同最大日期的列表中的项目分组并过滤它们

  19. 19

    Python在JSON文件中读取具有多个值的Dict

  20. 20

    如何过滤出具有2个相似值的行?

  21. 21

    搜索MongoDB对象数组,其中属性对于多个数组元素具有相同的值

  22. 22

    搜索MongoDB对象数组,其中属性对于多个数组元素具有相同的值

  23. 23

    从Python中的JSON文件将所有对象读取到列表中

  24. 24

    将多个嵌套的JSON文件读取到Pandas DataFrame中

  25. 25

    将多个JSon记录读取到数组

  26. 26

    JS对象数组可过滤出数组中的值

  27. 27

    将具有多个工作表的多个xlsx文件读取到一个R数据帧中

  28. 28

    从具有多个条件的 Map 中过滤出结果

  29. 29

    从具有匹配键的哈希数组中过滤出哈希

热门标签

归档