Python转义从Powershell输出生成的JSON文件

时间:2017-06-02 23:19:35

标签: python json powershell encoding

我有一个运行SQL查询的Powershell脚本,使用ConvertTo-JSON将其转换为JSON并将其写入文件。然后我使用Posh-SSH powershell模块将此文件SFTP到Linux服务器。

Linux服务器然后运行python脚本来打开文件并将其转换为JSON:

fname = '/foo/bar/map.json'
with open(fname, 'r') as f:
    map = json.loads(f.read())

然后,这个Python脚本会抛出错误:

  

无法解码JSON对象

这是由于Windows / Powershell显然将混乱的角色投入混合体中。我使用JSON linters来验证JSON的完整性,当我复制转储并将其粘贴到Linux中的新文件中时,它都是hunkydory。

我如何解决这个问题?我对字符编码知之甚少,无法判断发生了什么。

1 个答案:

答案 0 :(得分:2)

为什么在StackOverflow上写一个问题总能让我立刻解决我自己的问题?我的意思是,这需要几个小时。

将编码设置为UTF8就可以了。

Invoke-SQLCmd -Query "exec foo.dbo.proc"
   | Select-Object * -ExcludeProperty ItemArray, Table, RowError, RowState, HasErrors
   | ConvertTo-Json
   | % { [System.Text.RegularExpressions.Regex]::Unescape($_) }
   | Out-File "c:\config\map.json" -Encoding UTF8