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

PowerShell遍历JSON数据:如何输出中包含存在的子对象

解决PowerShell菜单数据处理问题

核心问题分析

你遇到两个关键问题:

  • 空数组adds:[]在PowerShell中不等于$null,原判断条件无法区分空数组和非空数组
  • 使用+=追加对象时触发op_Addition错误,因为$ItemPrices可能是单个PSCustomObject而非数组,无法执行加法操作

修正后的完整代码

$ItemPrices = ForEach ($Item in $Items) {
    # 输出主菜品的基础信息对象
    [PSCustomObject]@{
        Name  = $Item.name
        Price = $Item.price
        ID    = $Item.id
    }

    # 检查adds属性是否存在且为非空数组
    if ($Item.PSObject.Properties['adds'] -and $Item.adds.Count -gt 0) {
        # 循环遍历每个附加项,输出对应的对象
        foreach ($add in $Item.adds) {
            [PSCustomObject]@{
                Name  = $add.name
                Price = $add.price
                ID    = $add.id
            }
        }
    }
}

关键修正点说明

  1. 正确判断adds属性状态

    • $Item.PSObject.Properties['adds']:先确认当前菜品对象是否存在adds属性,避免无该属性的对象触发报错
    • $Item.adds.Count -gt 0:通过数组的Count属性判断是否非空,空数组的Count为0,非空数组大于0,比判断$null更准确
  2. 避免使用+=追加对象
    直接在ForEach循环中输出所有需要的对象,PowerShell会自动将所有输出收集为数组存入$ItemPrices,这种方式不仅效率更高,还能避免单个对象无法执行+=的类型错误

  3. 正确处理adds数组
    adds是数组类型,必须嵌套foreach循环逐个处理每个附加项,直接取$Item.adds.name会得到一个字符串数组,无法正确生成单个对象的属性值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:00:21