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

Nic*_*aid 4 regex powershell azure-data-factory azure-rm-template

我的问题与这个问题类似:

Json 文件到 powershell 并返回到 json 文件

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

我用这里的代码再次逃脱。

一些示例代码(为了清晰起见,多行):

$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
Run Code Online (Sandbox Code Playgroud)

这是我一直在阅读的 docoUnescape

输出文件的结果是相同的,只是所有文字实例\n(原始 JSON 文件中的)都转换为实际的回车符。这打破了 ARM 模板。

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

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

$armADFString = $armADFString -replace("\\n","\u000A")
Run Code Online (Sandbox Code Playgroud)

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

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

Nic*_*aid 5

我重读了 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
Run Code Online (Sandbox Code Playgroud)

当然 - 替换\\n\\n完全有意义:|

对于任何人提出更优雅的解决方案都非常高兴。

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

$armADFString = $armADFString -replace('\\"','\\"')
Run Code Online (Sandbox Code Playgroud)