Powershell JSON 转换删除 unicode 转义字符而不删除文字 \n

Powershell JSON transformation removing unicode escape chars without removing literal \n

我发给我们类似这个问题:

在 powershell 中导入和导出 ARM 模板时,使用 Convert-FromJsonConvert-ToJson,引入了 unicode 转义序列。

我又用代码here反转义了

一些示例代码(为清楚起见多行):

$armADF = Get-Content -Path $armFile -Raw | ConvertFrom-Json
$armADFString = $armADF | ConvertTo-Json -Depth 50
$armADFString | 
    ForEach-Object { [System.Text.RegularExpressions.Regex]::Unescape($_) } | 
    Out-File $outputFile

Here's 我一直在读的 doco Unescape

导致输出文件完全相同 除了 文字 \n 的所有实例(在原始 JSON 文件中)都变成实际运输 returns。这破坏了 ARM 模板。

如果我不包含 Unescape 代码,\n 会保留,但 unicode 字符也会保留,这也会破坏 ARM 模板。

看来我需要预先转义 \n 所以当我调用 Unescape 时它们会变成漂亮的小 \n。我已经尝试了一些事情,比如在调用 unescape 之前添加它。

$armADFString = $armADFString -replace("\n","\u000A")

这没有给我我需要的结果。

有人遇到并解决了这个问题吗?有成功的逃脱艺术家吗?

我重读了 Unescape doco 并注意到它基本上也会删除前导 \ 字符,所以我尝试了这段不太可能的代码:

$armADF = Get-Content -Path $armFile -Raw | ConvertFrom-Json
$armADFString = $armADF | ConvertTo-Json -Depth 50
$armADFString = $armADFString -replace("\n","\n")
$armADFString | 
    ForEach-Object { [System.Text.RegularExpressions.Regex]::Unescape($_) } | 
    Out-File $outputFile

当然 - 用 \n 替换 \n 是完全合理的:|

非常高兴有人提出更优雅的解决方案。

编辑:我正在部署本身基于 JSON 的 ADF ARM 模板。长话短说,我还发现我需要添加这个以阻止它不转义合法转义的引号:

$armADFString = $armADFString -replace('\"','\"')