为什么我生成的 JSON 有太多“\\”?

Why does my generated JSON have too many "\\"?

我有一个 Powershell 脚本,它生成一个包含数据的 JSON 文件。

不过我对这个文件有疑问。它产生双倍数量的“\”!

你知道我怎么解决这个问题吗?

这是我生成 JSON 文件的代码:

[ordered]@{
pcname='ENTER HERE';
share='\ENTER HERE\C$';
filename='ENTER HERE';
destfilepath='some\folder';
destfile='$in.share$in.destfilepath$in.filename';
RDdestfile='C:$in.destfilepath\';
Username="ENTER HERE";
Password="ENTER HERE";
EncryptedPassword=""
} | ConvertTo-Json | Out-File "$secFile"

$secFile 只是保存文件的路径。如果你也需要这个,请告诉我。

输出 JSON 文件看起来像这样:

{
"pcname": "ENTER HERE",
"share": "\\ENTER HERE\C$",
"filename": "ENTER HERE",
"destfilepath": "some\folder",
"destfile": "$in.share\$in.destfilepath\$in.filename",
"RDdestfile": "C:\$in.destfilepath\",
"Username": "ENTER HERE",
"Password": "ENTER HERE",
"EncryptedPassword": ""
}

问候

马丁

编辑:我还在 PowerShell.org 论坛和 Microsoft 技术社区中发布了这个问题,让你知道

https://powershell.org/forums/topic/why-does-my-generated-json-have-too-many/

https://techcommunity.microsoft.com/t5/windows-powershell/why-does-my-generated-json-have-too-many-quot-quot/td-p/1592234

这是您拥有的内容的正确反斜杠数。

在 JSON 字符串中,一个反斜杠 (\) 需要用另一个反斜杠 (\) 进行转义。

有办法逃避 JSON:

[ordered]@{
pcname='ENTER HERE';
share='\ENTER HERE\C$';
filename='ENTER HERE';
destfilepath='some\folder';
destfile='$in.share$in.destfilepath$in.filename';
RDdestfile='C:$in.destfilepath\';
Username="ENTER HERE";
Password="ENTER HERE";
EncryptedPassword=""
} | ConvertTo-Json | Foreach {[System.Text.RegularExpressions.Regex]::Unescape($_)} | Out-File "$secFile"

这将使反斜杠转义。输出:

{
    "pcname":  "ENTER HERE",
    "share":  "\ENTER HERE\C$",
    "filename":  "ENTER HERE",
    "destfilepath":  "some\folder",
    "destfile":  "$in.share$in.destfilepath$in.filename",
    "RDdestfile":  "C:$in.destfilepath\",
    "Username":  "ENTER HERE",
    "Password":  "ENTER HERE",
    "EncryptedPassword":  ""
}