如何移除PowerShell输出中键名的双引号以适配curl请求
问题解决:PowerShell构造非标准JSON适配curl请求
问题背景
调用接口时,只有移除JSON键名的双引号,curl请求才能正常执行。硬编码键名无引号、字符串值用单引号的非标准格式(比如{name: 'test', age: 20})测试端点完全没问题,但用PowerShell的ConvertTo-Json生成的标准JSON(键名带双引号、值用双引号)会导致curl请求失败,触发解析错误。
解决方案
由于接口要求非标准的类JS对象格式,我们可以在生成标准JSON后,通过字符串替换调整为目标格式:
1. 构造对象并生成标准JSON
先创建PowerShell对象,用ConvertTo-Json输出标准JSON:
$jsonObj = [PSCustomObject]@{ name = "test" age = 20 } $standardJson = $jsonObj | ConvertTo-Json -Compress
此时输出的标准JSON为:{"name":"test","age":20}
2. 替换为非标准格式
通过-replace正则替换,去掉键名的双引号,将字符串值的双引号改为单引号:
$nonStandardJson = $standardJson -replace '"(\w+)":', '$1:' -replace ': "([^"]+)"', ": '$1'"
处理后得到目标格式:{name: 'test', age:20}
3. 传入curl执行请求
用单引号包裹处理后的JSON,避免PowerShell解析双引号导致的问题:
curl -X POST -H "Content-Type: application/json" -d '$nonStandardJson' https://your-api-endpoint.com
补充说明
这种非标准格式不符合JSON规范,本质是接口端兼容了JavaScript对象字面量的解析逻辑。如果后续接口修复为支持标准JSON,建议直接使用ConvertTo-Json的原生输出即可。
内容的提问来源于stack exchange,提问作者cmill
相关产品推荐
相关产品推荐

