PowerShell生成JSON输出时如何移除参数数组外层多余双引号
问题根因
你遇到的问题本质是$jsonParameterData是JSON格式的字符串类型,没有被转换为PowerShell自定义对象就直接加入数组,当你最终执行ConvertTo-Json序列化时,PowerShell会把字符串类型的元素外层自动加双引号,就出现了你看到的多余引号问题。同时你原代码中还有键名写错、手动处理JSON字符串冗余的问题。
修正方案
- 先把参数模板字符串转为PowerShell对象,后续操作对象而非字符串
- 循环添加参数时每次拷贝模板对象,避免引用复用导致所有参数值相同
- 修正JSON序列化和写入文件的冗余操作,避免手动处理JSON字符串引发格式错误
完整修正代码
模板定义部分
$jsonData = @" { "FunctionName" : { "description": "", "parameters": [], "signature" : "" } } "@ | ConvertFrom-Json # 参数字符串模板直接转成PS对象作为模板 $jsonParameterTemplate = @" { "description": "", "name": "" } "@ | ConvertFrom-Json
参数填充部分
for($i=0; $i -lt $NumberOfArguments; $i++){ # 每次循环拷贝模板对象,避免引用类型复用导致所有参数值相同 $paramObj = $jsonParameterTemplate.PSObject.Copy() $paramObj.name = $ArrayOfArguments[$i] $paramObj.description = $ArrayOfArgumentDescriptions[$i] # 这里修正原代码写错的键名,改为实际的FunctionName $jsonData.FunctionName.parameters += $paramObj }
写入文件部分
# 加-Depth参数防止深层级内容被截断,直接输出即可不需要手动处理转义和切头尾 $jsonData | ConvertTo-Json -Depth 10 | Set-Content -Path $OutputFile -Encoding UTF8 Write-Output "`nFinished writing JSON data to file.`n"
如果你确实只需要输出FunctionName对应的JSON片段(不需要外层大括号),可以用以下方式处理,比手动切割字符串更安全:
$fullJsonObj = $jsonData | ConvertFrom-Json $functionJsonFragment = $fullJsonObj.FunctionName | ConvertTo-Json -Depth 10 $functionJsonFragment | Set-Content -Path $OutputFile -Encoding UTF8
内容的提问来源于stack exchange,提问作者notexactly
相关产品推荐
相关产品推荐

