You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell ConvertFrom-Json 如何按嵌套数组属性名匹配取值导出CSV

PowerShell 动态匹配嵌套标签值导出CSV实现方案

你原来用固定数组索引的写法之所以适配不了变动的标签顺序,核心问题是把标签位置写死了——完全不需要依赖索引,直接在自定义计算属性的表达式里,通过标签的Name属性做精准过滤匹配,就能拿到对应的值。

具体修改方式

把原来写死索引的表达式段:

# 原来的固定索引写法,受标签排列顺序直接影响
{$_.ItemTags[3].Value}

替换为按Name属性过滤的逻辑:

# 动态匹配写法,完全不受标签排列顺序影响
{$_.ItemTags.Where({$_.Name -eq '你要提取的标签名'}).Value}

完整可复用代码

# 读取JSON时加-Raw参数避免逐行解析的格式异常
$jsonData = Get-Content -Path "C:\Temp\sample.json" -Raw | ConvertFrom-Json

$jsonData | Select-Object `
    ItemName,
    ItemID,
    ItemDate,
    ItemValue,
    # 提取Name为"Tag 4"的标签对应值
    @{Name = 'Tag 4'; Expression = {$_.ItemTags.Where({$_.Name -eq 'Tag 4'}).Value}},
    # 如果需要提取其他标签,直接新增同款计算属性即可,比如提取"Another tag name"的值
    @{Name = 'Another tag name'; Expression = {$_.ItemTags.Where({$_.Name -eq 'Another tag name'}).Value}}
| Export-Csv "C:\Temp\items.csv" -NoTypeInformation -Encoding UTF8

注意事项

  • 代码里用的Where()是PowerShell内置的数组原生方法,相比管道接Where-Object性能更高,处理包含数十个标签的大JSON也不会有明显性能损耗
  • 如果同一个Item下存在重名的标签(同一个Name出现多次),该方法会自动把所有匹配的Value拼接为逗号分隔的字符串,符合CSV的列存储格式
  • 匹配时如果需要忽略标签名的大小写差异,把判断运算符-eq替换为-ieq即可
  • 没有匹配到对应标签时,表达式会自动返回空值,不会出现索引越界的报错
  • 导出CSV时指定-Encoding UTF8可以避免中文内容乱码

内容的提问来源于stack exchange,提问作者wd510

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.26 18:15:00