我正在尝试从网址下载json文件并使用以下代码将其转换为json对象,这会引发异常:
[System.Text.Encoding]::Default.GetString((Invoke-WebRequest $url).Content) |
ConvertFrom-Json
它抛出:
ConvertFrom-Json : Invalid JSON primitive: ï
如果我使用Unicode
或UTF8
,则会引发相同的异常。
但是如果我使用浏览器下载文件并查找文件中的字符,文件中就没有这样的字符。此外,如果您尝试将保存的文件转换为json对象,它可以正常工作:
Get-Content $localFilePath | ConvertFrom-Json
为什么我收到此例外?
如何在不保存文件的情况下获取文件内容并毫无问题地传递给ConvertFrom-Json
?
答案 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)
您会在文件开头看到
,而使用浏览器保存时,您无法看到此类序列。