我有在安装时在安装程序中运行的 powershell 脚本。我尝试了很多示例来转义特殊字符,这意味着如果用户选择用户名或密码并且包含斜杠或逗号等字符,powershell 将无法创建 json 对象。有时,如果用户输入逗号,它不会将其视为字符串,而是会分解为 json 数组。以下是我的示例,变量的值来自安装程序,它们是有效的字符串。感谢您的见解。
$pathToJson = $InstalledPath+"appsettings.json"
$a = Get-Content $pathToJson | ConvertFrom-Json
$a.SQLConnectionSettings.SqlServerIp=$GkDbIP
$a.SQLConnectionSettings.SqlInitialCatalog=$GkDbName
$a.SQLConnectionSettings.SqlIntegratedSecurity=$SqlAuthType
$a.SQLConnectionSettings.SqlUserId=$GkDbUsername
$a.SQLConnectionSettings.SqlPassword=$SQLPassword
$a | ConvertTo-Json | set-content $pathToJson
最佳答案
您可以使用Regex.Unescape
取消转义 json 内容。例如:
$OBJECT = @{username="someone"; password="someone's \password"}
$OBJECT | ConvertTo-Json -depth 100 |
% { [System.Text.RegularExpressions.Regex]::Unescape($_) } |
Out-File "D:\somefile.json" -Encoding utf8
结果如下:
{
"password": "someone's \password",
"username": "someone"
}
如果不使用unescape,密码将保存为“someone\u0027s\\password”
。
关于powershell - 如何在创建 json 对象时转义 PowerShell 中的特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47725755/