PowerShell中ConvertTo-Json额外添加反斜杠与双引号如何解决
问题解决方案
故障原因
这是PowerShell JSON序列化的典型错误:
- 你提前将
$Exclusion哈希表单独转成了JSON字符串,再把这个字符串追加到了$policyWebResponse.memoryviolation.memory_exclusion数组中 - 该数组原本存储的是未序列化的结构化对象(调试输出里第一个元素就是正常的对象格式)
- 后续你把整个
$policyWebResponse对象转成JSON用于POST请求时,PowerShell会将数组里的字符串类型元素二次序列化:自动给字符串加外层双引号,内部的双引号、反斜杠全部加转义符,就出现了你看到的额外转义问题。
解决方法
修改逻辑,不要提前序列化单个$Exclusion对象,直接把结构化的哈希表追加到数组中,最后统一序列化整个policy对象即可,修改后的代码如下:
$Exclusion = @{}; $Exclusion | Add-Member -Type NoteProperty -Name 'path' -Value '\stuff' $Exclusion | Add-Member -Type NoteProperty -Name 'violations' -Value @() # 删掉提前转JSON的步骤,直接把结构化对象加入数组 $policyWebResponse.memoryviolation.memory_exclusion += $Exclusion # 最后需要发请求前,再把整个policy对象转成JSON,注意加-Depth参数避免层级截断 $newPolicyJson = $policyWebResponse | ConvertTo-Json -Depth 10 -Compress
注意:使用ConvertTo-Json时建议指定-Depth参数,PowerShell默认序列化深度只有2,层级深的结构会被截断,导致数据丢失
内容的提问来源于stack exchange,提问作者rcmpayne
相关产品推荐
相关产品推荐

