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 } } } }
关键修正点说明
正确判断adds属性状态
$Item.PSObject.Properties['adds']:先确认当前菜品对象是否存在adds属性,避免无该属性的对象触发报错$Item.adds.Count -gt 0:通过数组的Count属性判断是否非空,空数组的Count为0,非空数组大于0,比判断$null更准确
避免使用
+=追加对象
直接在ForEach循环中输出所有需要的对象,PowerShell会自动将所有输出收集为数组存入$ItemPrices,这种方式不仅效率更高,还能避免单个对象无法执行+=的类型错误正确处理adds数组
adds是数组类型,必须嵌套foreach循环逐个处理每个附加项,直接取$Item.adds.name会得到一个字符串数组,无法正确生成单个对象的属性值
内容的提问来源于stack exchange,提问作者user3342019
相关产品推荐
相关产品推荐

