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
相关产品推荐
相关产品推荐

