【发布时间】:2021-05-04 12:55:24
【问题描述】:
有点奇怪的问题。我有一个需要处理的大型 JSON 文件。基于另一个问题,我需要流式传输文件,否则它会因为内存而给我带来问题:JSON Powershell memory issue
我拥有的是这样的:
get-content -Path largefile.json | ForEach-Object {
$row = $_ = $_.TrimStart('[').TrimEnd(']')
if ($_) { $_ | Out-String | ConvertFrom-Json }
New-Item -Path $($Row.Id).txt
Set-Content -Path $($Row.Id).txt -Value ($row.Body)
}
我可以轻松地使用 $row 来发布 Largefile.json 中最后处理的行。我想在当前处理的行中创建一个名称为 Id 的文件,并将正文列添加到文件中。但是,当我想使用 $row.Id 显示特定列时,不幸的是,它显示为空。
Largefile.json的结构如下:
[{"Id":"1","ParentId":"parent","Name":"filename","OwnerId":"owner","CreatedDate":"date","Body":"data1"}
{"Id":"2","ParentId":"parent","Name":"filename","OwnerId":"owner","CreatedDate":"date","Body":"data2"}
{"Id":"3","ParentId":"parent","Name":"filename","OwnerId":"owner","CreatedDate":"date","Body":"data3"}
{"Id":"4","ParentId":"parent","Name":"filename","OwnerId":"owner","CreatedDate":"date","Body":"data4"}
{"Id":"5","ParentId":"parent","Name":"filename","OwnerId":"owner","CreatedDate":"date","Body":"data5"}
]
最终结果应该是我有5个文件:
-
1.txt - 文件内的值应该是:data1
-
2.txt - 文件内的值应该是:data2
-
3.txt - 文件内的值应该是:data3
-
4.txt - 文件内的值应该是:data4
-
5.txt - 文件内的值应该是:data5
我使用的是 Powershell 7.1.3
有什么方法可以让我像普通的 ForEach 一样使用 $row.Id 和 $row.ParentId 吗?
感谢您的帮助。
【问题讨论】:
-
好的,我花了一段时间才明白你在哪里寻找,但我认为这就是答案:与
ForEachstatement 相比,ForEach-Object(aliasForEach) cmdlet 有一个 自动变量:$_or$PSItem,代表当前项($Row) -
我知道,但是当我运行 $_.Id 时,它应该只显示 Id 但它只是显示为空
-
如果我仍然没有抓住重点,请使用下面我的答案中的示例数据(带有唯一 ID 等),定义您将“经常”使用的语句以及您所期望的完全结果基于示例数据。换句话说,在您的问题中创建一个看起来像实际情况的minimal reproducible example。
-
我得到了无效的 json 数组。它缺少逗号。该代码也有“无效的 json 原始错误”。
-
我们还没有收到您的来信.. 任何给定的答案是否解决了您的问题?如果是这样,请通过单击左侧的 ✓ 图标来考虑accepting。这将帮助其他有类似问题的人更轻松地找到它,并有助于激励其他人回答您将来可能遇到的任何问题。
标签: json powershell foreach-object