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

如何判断ConvertFrom-Json生成的PSObject是否包含子对象?

判断ConvertFrom-Json生成的PSObject是否包含子对象

要判断ConvertFrom-Json生成的PSObject属性是否包含子对象,核心是检查属性值的类型——嵌套的JSON对象会被转换为PSCustomObject,我们可以通过类型判断来替代不存在的HasChildren属性。

基础实现(仅处理嵌套对象)

针对你提供的JSON结构,修改后的遍历代码如下:

# 读取并转换JSON为PSObject
$settings = Get-Content -Raw $pathToFile | ConvertFrom-Json

# 定义递归遍历函数
function TraversePSObject {
    param(
        [PSCustomObject]$obj
    )
    foreach ($prop in $obj.PSObject.Properties) {
        if ($prop.Value -is [PSCustomObject]) {
            # 该属性包含子对象,递归遍历
            Write-Host "进入子节点: $($prop.Name)"
            TraversePSObject $prop.Value
        } else {
            # 输出基础键值对
            Write-Host "键: $($prop.Name),值: $($prop.Value)"
        }
    }
}

# 启动遍历
TraversePSObject $settings

运行这段代码后,Logging节点会被识别为包含子对象并进入递归,AllowedHosts则直接输出键值对,符合你的预期。

扩展实现(处理数组类型节点)

如果JSON中包含数组(数组内可能嵌套对象),可以扩展判断逻辑,同时处理数组类型:

$settings = Get-Content -Raw $pathToFile | ConvertFrom-Json

function TraversePSObject {
    param($obj)
    # 先处理数组类型
    if ($obj -is [array]) {
        $index = 0
        foreach ($item in $obj) {
            Write-Host "数组元素索引: $index"
            TraversePSObject $item
            $index++
        }
        return
    }
    # 处理PSCustomObject类型
    if ($obj -is [PSCustomObject]) {
        foreach ($prop in $obj.PSObject.Properties) {
            if ($prop.Value -is [PSCustomObject] -or $prop.Value -is [array]) {
                Write-Host "进入子节点/数组: $($prop.Name)"
                TraversePSObject $prop.Value
            } else {
                Write-Host "键: $($prop.Name),值: $($prop.Value)"
            }
        }
    } else {
        # 输出基础类型值(如字符串、数字等)
        Write-Host "值: $obj"
    }
}

TraversePSObject $settings

核心判断逻辑总结

  • 若属性值类型为[PSCustomObject]:对应JSON中的嵌套对象,需要深入遍历
  • 若属性值类型为[array]:对应JSON中的数组,需遍历数组内的每个元素,再判断元素是否为对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 05:21:56