我正在编写一个对JSON文件进行更改的脚本,但是当该文件被转换回JSON时,它会扩展特殊字符。
例如,JSON文件包含带有"&“的密码。复制该问题的一种快速方法是使用以下命令:
PS> "Password&123“|转换为-Json输出为:”Password\u0026123“
##Here is how I import the JSON FILE:
$jsonfile = (Get-Content .\example.json -Encoding Ascii) -join "`n" | ConvertFrom-Json
##Exporting JSON FILE without modifying it.
$jsonfile | ConvertTo-Json |Out-File "new.json"--这是一个简化的JSON文件示例
{
"Server1":
{
"username":"root",
"password":"Password&dfdf"
},
"Server2":
{
"username":"admin",
"password":"Password&1234"
}
}发布于 2015-03-28 08:52:43
这是由Convertto-Json的自动字符转义功能引起的,它会影响<>\'&等多个符号
ConvertFrom-Json将正确读取转义字符。使用您的示例:
PS C:\> {"Password\u0026123"} | ConvertFrom-Json
Password&123您的示例代码生成了一个包含转义字符的文件,但是ConvertFrom-Json可以将其读回原始密码。如下所示:
PS C:\> (Get-Content .\example.json -Encoding Ascii) -join "`n" | ConvertFrom-Json
Server1 Server2
------- -------
@{username=root; password=Password&dfdf} @{username=admin; password=Password&1234}
PS C:\> (Get-Content .\new.json -Encoding Ascii) -join "`n" | ConvertFrom-Json
Server1 Server2
------- -------
@{username=root; password=Password&dfdf} @{username=admin; password=Password&1234}如果您需要密码以非转义方式存储,则可能需要做一些更花哨的工作。请参阅这篇关于Converting Unicode strings to escaped ascii strings的帖子
或者,如果可能,避免使用受影响的字符。
发布于 2016-06-08 23:24:11
尝试Unescape()方法:
$jsonfile | ConvertTo-Json | % { [System.Text.RegularExpressions.Regex]::Unescape($_) } | Out-File "new.json"发布于 2021-11-19 22:48:43
使用unicode 7.2进行了测试,并显示PowerShell和其他特殊字符已成功转换。更不用说缩进看起来也改进了。
https://stackoverflow.com/questions/29306439
复制相似问题