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

如何在PowerShell中将JSON哈希表读取为实际哈希表?

问题描述

有如下JSON文件foo.json:

{
  "foo": {
    "a": 1,
    "b": 2
  }
}

使用PowerShell命令读取后,仅能通过点语法访问属性,使用哈希表索引语法会报错:

$foo = Get-Content 'foo.json' | ConvertFrom-Json -Depth 30
$foo.a  # 输出 1
$foo.b  # 输出 2
$foo['a']  # 触发错误

需要实现将读取的JSON对象转为实际哈希表,或通过合理硬编码方式实现索引访问。

解决方案

方法1:将JSON转为哈希表

通过自定义函数把ConvertFrom-Json生成的PSObject递归转为哈希表,支持嵌套结构:

function ConvertTo-Hashtable {
    param(
        [Parameter(ValueFromPipeline)]
        $InputObject
    )
    process {
        if ($InputObject -is [PSObject]) {
            $hash = @{}
            foreach ($prop in $InputObject.PSObject.Properties) {
                $hash[$prop.Name] = $prop.Value | ConvertTo-Hashtable
            }
            $hash
        }
        elseif ($InputObject -is [array]) {
            $InputObject | ForEach-Object { $_ | ConvertTo-Hashtable }
        }
        else {
            $InputObject
        }
    }
}

# 使用示例
$foo = Get-Content 'foo.json' | ConvertFrom-Json -Depth 30 | ConvertTo-Hashtable
$foo['foo']['a']  # 输出 1
$foo.foo.b        # 同时兼容点语法访问

方法2:硬编码实现索引访问

无需转换哈希表,直接通过PSObject.Properties实现索引式属性访问:

# 直接访问的写法
$foo = Get-Content 'foo.json' | ConvertFrom-Json -Depth 30
$foo.foo.PSObject.Properties['a'].Value  # 输出 1

# 封装成函数简化调用
function Get-JsonProperty {
    param(
        [Parameter(Mandatory)]
        $JsonObject,
        [Parameter(Mandatory)]
        [string]$PropertyName
    )
    $JsonObject.PSObject.Properties[$PropertyName].Value
}

Get-JsonProperty -JsonObject $foo.foo -PropertyName 'a'  # 输出 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 11:11:01