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
相关产品推荐
相关产品推荐

