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

PowerShell脚本YAML转JSON时变量值变为Hashtable的解决问询

问题

我编写了一个PowerShell脚本用于将YAML输入转换为JSON模板,但输出中的变量值始终被格式化为System.Collections.Hashtable,导致生成的JSON无法导入目标系统。需要保留变量的原始值,避免其被转换为哈希表类型。

转换脚本

$yamlContent = Get-Content -Path "input.yaml" -Raw
$yamlObject = ConvertFrom-Yaml -InputObject $yamlContent
$jsonOutput = $yamlObject | ConvertTo-Json -Depth 10
Set-Content -Path "output.json" -Value $jsonOutput

待转换的YAML文件(input.yaml)

variables:
  - name: Environment
    value: Production
  - name: Version
    value: "1.0.0"

期望的JSON输出

{
  "variables": [
    {
      "name": "Environment",
      "value": "Production"
    },
    {
      "name": "Version",
      "value": "1.0.0"
    }
  ]
}

实际错误输出

{
  "variables": [
    {
      "name": "Environment",
      "value": "System.Collections.Hashtable"
    },
    {
      "name": "Version",
      "value": "System.Collections.Hashtable"
    }
  ]
}

解决方法

  • 检查YAML解析器行为:若使用powershell-yaml模块的ConvertFrom-Yaml,可通过-Ordered参数确保解析后的对象保持原始结构,避免意外的哈希表转换:
    $yamlObject = ConvertFrom-Yaml -InputObject $yamlContent -Ordered
    
  • 手动处理哈希表值:遍历解析后的对象,将被误解析为哈希表的变量值转换为原始内容(假设哈希表仅包含单个键值对):
    foreach ($var in $yamlObject.variables) {
        if ($var.value -is [System.Collections.Hashtable]) {
            $var.value = $var.value.Values[0]
        }
    }
    
  • 修正YAML格式:检查YAML文件,避免变量值被意外解析为嵌套结构。比如不要使用{ Production }这类易被识别为哈希表的写法,直接写原始值即可。
  • 确保JSON转换深度足够:使用ConvertTo-Json时指定足够大的-Depth参数,防止多层嵌套结构被截断或错误转换:
    $jsonOutput = $yamlObject | ConvertTo-Json -Depth 10
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 08:50:22