ConvertFrom-Json:无效的JSON原语:ï

时间:2017-12-20 14:36:33

标签: powershell

我正在尝试从网址下载json文件并使用以下代码将其转换为json对象,这会引发异常:

[System.Text.Encoding]::Default.GetString((Invoke-WebRequest $url).Content) | 
    ConvertFrom-Json

它抛出:

ConvertFrom-Json : Invalid JSON primitive: ï

如果我使用UnicodeUTF8,则会引发相同的异常。

但是如果我使用浏览器下载文件并查找文件中的字符,文件中就没有这样的字符。此外,如果您尝试将保存的文件转换为json对象,它可以正常工作:

Get-Content $localFilePath | ConvertFrom-Json

为什么我收到此例外?
如何在不保存文件的情况下获取文件内容并毫无问题地传递给ConvertFrom-Json

1 个答案:

答案 0 :(得分:1)

要解决此问题,您可以使用:

[System.Net.WebClient]::new().DownloadString($url) | ConvertFrom-Json

问题是因为在用UTF8编码的文件的开头存在BOM(U+FEFF byte order mark)字符。如果您通过这种方式从url获取文件的内容:

[System.Text.Encoding]::Default.GetString((Invoke-WebRequest $url).Content)

您会在文件开头看到,而使用浏览器保存时,您无法看到此类序列。