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

PowerShell保存含特殊字符字符串到JSON文件的问题求助

解决PowerShell保存JSON时的三个问题:转义字符丢失、多余空格、尖括号转义

我来帮你逐个搞定这几个头疼的问题:

1. 反引号`丢失的问题

你定义变量$newY = "12313tytk1.xp1F4i12313211ddsada;"的时候,得注意PowerShell里的**反引号是转义字符**——单个会把后面的字符当作特殊符号处理(比如n代表换行),所以F其实并没有保留反引号本身。要在双引号字符串里保留单个反引号,你得用**两个反引号``**来表示一个实际的:

$newY = "12313tytk1.xp1``F4i12313211ddsada;"

这样变量里的反引号就会被正确保留,写入JSON时自然就不会丢失了。

2. 文件格式存在过多空格的问题

ConvertTo-Json默认会生成带缩进、换行的格式化JSON,如果你想要紧凑的无多余空格格式,只需要加上-Compress参数:

$a | ConvertTo-Json -Depth 5 -Compress | Set-Content 'settings.json'

这个参数会直接去掉所有冗余的空格和换行,生成压缩后的JSON内容。

3. <和>被转换为\u003c和\u003e的问题

这是因为ConvertTo-Json默认会转义HTML特殊字符(<、>、&等),解决方式分版本:

如果你用的是PowerShell 7及以上版本

直接用-EscapeHandling参数指定只转义非ASCII字符,不处理HTML字符:

$a | ConvertTo-Json -Depth 5 -EscapeHandling EscapeNonAscii | Set-Content 'settings.json'

如果你用的是PowerShell 5.1(Windows默认预装版本)

5.1的ConvertTo-Json没有-EscapeHandling参数,这时候可以用.NET原生的System.Text.Json.JsonSerializer来序列化,它默认不会转义HTML字符:

# 将对象序列化为JSON字符串
$jsonString = [System.Text.Json.JsonSerializer]::Serialize($a, [System.Text.Json.JsonSerializerOptions]@{
    WriteIndented = $false # 设为$true会保留缩进格式,$false是压缩格式
    MaxDepth = 5
})
# 写入文件
$jsonString | Set-Content 'settings.json' -Encoding utf8

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:17:50