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

问题描述

我有一个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 Tech Community中,只是您知道

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":  ""
}