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

PowerShell生成JSON输出时如何移除参数数组外层多余双引号

问题根因

你遇到的问题本质是$jsonParameterData是JSON格式的字符串类型,没有被转换为PowerShell自定义对象就直接加入数组,当你最终执行ConvertTo-Json序列化时,PowerShell会把字符串类型的元素外层自动加双引号,就出现了你看到的多余引号问题。同时你原代码中还有键名写错、手动处理JSON字符串冗余的问题。

修正方案
  1. 先把参数模板字符串转为PowerShell对象,后续操作对象而非字符串
  2. 循环添加参数时每次拷贝模板对象,避免引用复用导致所有参数值相同
  3. 修正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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:00:06