Почему в моем сгенерированном JSON слишком много «\»?

#json #windows #powershell #web-deployment

#json #Windows #powershell #веб-развертывание

Вопрос:

У меня есть скрипт Powershell, который генерирует файл JSON с данными в нем.

Однако у меня проблема с этим файлом. Оно генерирует в два раза больше «»!

Вы знаете, как я мог бы это решить?

Вот мой код для генерации файла JSON:

 [ordered]@{
pcname='ENTER HERE';
share='\ENTER HEREC$';
filename='ENTER HERE';
destfilepath='somefolder';
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

Ответ №1:

Это правильное количество обратных косых черт для имеющегося у вас содержимого.

В строке JSON обратная косая черта ( ) должна экранироваться другой обратной косой чертой ( \ ).

Комментарии:

1. Хорошо, хорошо, это действительно помогло мне, большое спасибо! Однако у меня все еще есть проблема… У меня есть много частей, где мне нужна только одна обратная косая черта. Как бы мне этого достичь? Приветствия

2. Если вам нужен действительный JSON, вы не можете. Но если вы проанализируете содержимое с помощью анализатора JSON, оно будет проанализировано правильно, т. е. обратная косая черта снова не будет экранирована.

3. Еще раз спасибо за ваш комментарий! Я хотел спросить, как я могу разобрать JSON, потому что я не силен в JSON, а также не особенно хорош в powershell… А также смогу ли я все еще преобразовать его из json обратно в обычный с помощью powershell? (ConvertFrom-Json) Приветствия

4. devblogs.microsoft.com/scripting/…

Ответ №2:

Есть способ избежать JSON:

 [ordered]@{
pcname='ENTER HERE';
share='\ENTER HEREC$';
filename='ENTER HERE';
destfilepath='somefolder';
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 HEREC$",
    "filename":  "ENTER HERE",
    "destfilepath":  "somefolder",
    "destfile":  "$in.share$in.destfilepath$in.filename",
    "RDdestfile":  "C:$in.destfilepath",
    "Username":  "ENTER HERE",
    "Password":  "ENTER HERE",
    "EncryptedPassword":  ""
}
  

Комментарии:

1. Но теперь у меня проблема в том, что когда я конвертирую его из JSON и обратно в json, все значения вводятся как null… Есть идеи, почему это может быть?

2. Потому что это недопустимый JSON, то есть фактически не JSON.

3. Да, @RobbyCornelissen вы правы, и все же, чтобы соответствовать потребностям пользователя, я опубликовал это решение.