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

PowerShell解析JSON时拼接嵌套tags属性到PSCustomObject的方法

PowerShell 构造PSCustomObject时拼接JSON嵌套标签值方案

失败原因

你直接执行$RoadmapContent.Tags -join ";"未生效的核心原因是:$RoadmapContent.Tags存储的是完整的tag对象数组,而非直接的标签名字符串数组。直接对对象数组执行join操作时,PowerShell会默认调用对象的默认ToString()方法,返回的是对象类型名称而非你需要的tagName属性值,因此结果不符合预期。

可行实现方式

方式1:成员访问枚举(推荐,PowerShell 3.0及以上版本通用,写法最简洁)

PowerShell原生支持对数组直接访问属性,批量提取数组所有元素的指定属性值,直接在PSCustomObject的字段定义中使用即可,无需额外遍历变量:

# 已有的JSON读取逻辑无需修改
$RoadmapContent = Get-Content -Raw -Path ./M365Roadmap_single.json | ConvertFrom-Json

$RoadmapItems = [PSCustomObject]@{
    # 其余自定义字段按原有业务逻辑填写即可,例如:
    FeatureId = $RoadmapContent.id
    FeatureTitle = $RoadmapContent.title
    ReleaseDate = $RoadmapContent.publicAvailabilityDate
    # 直接批量提取所有tag的tagName属性后拼接
    Tags = $RoadmapContent.tags.tagName -join ", "
}

执行后Tags字段输出效果和你预期完全一致:

Microsoft Teams, Worldwide (Standard Multi-Tenant), General Availability, Web, Desktop

如果需要分号分隔,直接将-join ", "修改为-join "; "即可。

方式2:管道遍历兼容低版本

如果使用低于3.0的PowerShell版本,无法使用成员访问枚举特性,可以直接在字段定义中通过管道遍历提取属性值,同样无需提前定义单独变量存储标签列表:

$RoadmapItems = [PSCustomObject]@{
    # 其余字段省略
    Tags = $RoadmapContent.tags | ForEach-Object { $_.tagName } -join ", "
}

注意事项

如果执行后发现Tags字段为空,先检查JSON转换后的属性层级是否正确:部分M365路线图JSON的tags字段是嵌套在features等子节点下,而非根节点,调整对应属性路径即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:09:22