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

PowerShell调用REST接口时如何转义JSON字符串中的{}等特殊字符

问题解决方法

核心错误原因

你手动拼接JSON字符串、手动转义大括号的操作是错误的。JSON规范里大括号如果是字符串内部的内容,不需要单独转义,只有作为JSON结构的大括号才是语法标记。你手动给大括号加反斜杠转义,反而会让JSON解析器识别到非法的转义字符,触发格式错误。

正确实现方案

直接用PowerShell内置的ConvertTo-Json处理JSON序列化,它会自动识别所有需要转义的特殊字符(包括双引号、反斜杠、控制字符等),不需要你手动处理任何转义逻辑:

# 1. 读取并预处理HTML内容,仅移除多余空白字符,不需要做任何转义
$HtmlBodyFilename = "$PSScriptRoot\Emailbody_Home.html" 
$HtmlFromFile = Get-Content $HtmlBodyFilename -Raw
$HtmlFromFileStripped = $HtmlFromFile.Replace("`r", "").Replace("`n", "").Replace("`t","") 

$templateID = "Test_Temp7"

# 2. 构造PowerShell对象,直接填原始属性值
$bodyObj = [PSCustomObject]@{
    uuid = $templateID
    subject = "My Email Subject"
    body = $HtmlFromFileStripped
}

# 3. 自动序列化为合法JSON,自动处理所有转义
$body = $bodyObj | ConvertTo-Json -Depth 10

# 4. 校验JSON格式,这一步基本不会再报错
$bodyJSON = ConvertFrom-Json $body

# 5. 构造请求参数,额外添加兼容配置避免连接中断
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$params = @{
    Uri         = 'https://stage-tms.demo.com/templates/email'
    Headers     = $headers
    Method      = 'POST'
    Body        = $body
    ContentType = 'application/json'
    UseBasicParsing = $true
}

# 发送请求
# Invoke-RestMethod @params

大文件报错定位方法

针对83KB真实HTML文件的报错,可以按以下步骤定位问题:

  • 把序列化后的$body内容输出到本地文件:$body | Out-File -FilePath "debug.json" -Encoding utf8,用JSON校验工具打开,就能直接看到哪一部分有格式错误
  • 如果移除校验后出现连接意外关闭,优先检查:
    • 服务端是否限制了POST请求的最大大小
    • 确认请求的TLS版本和服务端要求一致,已经添加的Tls12配置可以解决大部分这类问题
    • 检查HTML内容中是否存在未闭合的双引号、特殊控制字符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:45:03