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

如何从PowerShell提取JSON中字符串化哈希表的自定义值?

解决方法

你的问题根源在于:JSON里的Actions数组元素是PowerShell哈希表的字符串表示(比如@{ActionType=Add; ObjectId=abc-123}),并非标准JSON格式的嵌套对象,所以ConvertFrom-Json解析后这些元素仍为字符串,无法直接提取嵌套属性。以下是具体解决步骤:

方案1:快速解析(适合可信来源数据)

# 读取并解析JSON文件
$jsonData = Get-Content -Path "你的JSON文件路径.json" -Raw | ConvertFrom-Json

# 遍历每个Action字符串,转换为对象并合并外层属性
$output = $jsonData.Actions | ForEach-Object {
    # 将哈希表字符串转为真实PS对象
    $actionObj = Invoke-Expression $_
    # 组合外层字段与当前Action的属性
    [PSCustomObject]@{
        Id          = $jsonData.Id
        Name        = $jsonData.Name
        ActionType  = $actionObj.ActionType
        ObjectId    = $actionObj.ObjectId
    }
}

# 导出为CSV(或直接打印查看结果)
$output | Export-Csv -Path "输出文件路径.csv" -NoTypeInformation -Encoding UTF8

方案2:安全解析(适合不可信来源数据)

如果Actions里的字符串来源不可控,Invoke-Expression存在执行恶意代码的风险,可改用手动拆分解析:

$jsonData = Get-Content -Path "你的JSON文件路径.json" -Raw | ConvertFrom-Json

$output = $jsonData.Actions | ForEach-Object {
    # 清理哈希表格式的字符串
    $cleanStr = $_ -replace '@{','' -replace '}',''
    # 拆分键值对并转为哈希表
    $actionProps = @{}
    $cleanStr -split ';' | ForEach-Object {
        $key, $value = ($_.Trim() -split '=', 2)
        $actionProps[$key] = $value.Trim()
    }
    # 组合字段
    [PSCustomObject]@{
        Id          = $jsonData.Id
        Name        = $jsonData.Name
        ActionType  = $actionProps['ActionType']
        ObjectId    = $actionProps['ObjectId']
    }
}

$output | Export-Csv -Path "输出文件路径.csv" -NoTypeInformation -Encoding UTF8

关键说明

  • 两种方案都会将每个Action条目展开为独立行,自动重复外层的Id和Name字段,完全匹配你需要的CSV格式。
  • -NoTypeInformation参数会移除PowerShell默认添加的类型信息头,让CSV更简洁规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 02:49:50