如何使用PowerShell从含1000个JSON对象的文本文件中按指定DUNS号检索单个对象
使用PowerShell按DUNS号检索JSON文件中的特定对象
没问题,我来帮你搞定这个需求!下面是两种常见场景下的PowerShell解决方案,适配你说的包含1000个JSON对象的文件:
场景1:文件为JSON Lines格式(每行一个独立JSON对象)
这是大数量JSON对象常用的存储方式,逐行处理能避免一次性加载整个文件到内存,效率更高:
# 定义你要查找的目标DUNS号 $targetDuns = "024330410" # 逐行读取文件、解析JSON并匹配DUNS号 Get-Content -Path "C:\你的文件路径\data.json" | ForEach-Object { try { # 解析当前行的JSON对象 $jsonObj = $_ | ConvertFrom-Json # 匹配organization下的duns字段 if ($jsonObj.organization.duns -eq $targetDuns) { # 将匹配到的对象转回JSON字符串输出(可根据需求保存到文件) $jsonObj | ConvertTo-Json -Depth 10 # 找到目标后立即退出循环,节省不必要的处理 break } } catch { Write-Warning "解析某行JSON时出错: $_" } }
场景2:文件为完整的JSON数组(所有对象包裹在[]中)
如果你的文件是标准的JSON数组格式,直接加载整个数组再过滤更简单:
$targetDuns = "024330410" # 一次性读取整个文件并解析为JSON数组 $jsonArray = Get-Content -Path "C:\你的文件路径\data.json" -Raw | ConvertFrom-Json # 过滤出匹配DUNS号的对象 $matchingObject = $jsonArray | Where-Object { $_.organization.duns -eq $targetDuns } # 输出结果 if ($matchingObject) { $matchingObject | ConvertTo-Json -Depth 10 } else { Write-Host "未找到DUNS号为 $targetDuns 的组织对象" }
实用小贴士
- 深度设置:
ConvertTo-Json默认的嵌套深度是2,你的JSON有多层嵌套(比如organization下还有dunsControlStatus),所以要显式设置-Depth参数(比如10)避免截断内容 - 格式匹配:确保DUNS号以字符串形式匹配,不要转成数字(比如示例中的
024330410有前导零,转数字会丢失) - 多匹配处理:如果文件中有多个相同DUNS号的对象,去掉代码中的
break即可输出所有匹配结果
内容的提问来源于stack exchange,提问作者user3278314
相关产品推荐
相关产品推荐

