Powershell ConvertFrom Json:无效的Json原语:ï;

Powershell ConvertFrom Json:无效的Json原语:ï;,powershell,Powershell,我试图从url下载json文件,并使用以下引发异常的代码将其转换为json对象: [System.Text.Encoding]::Default.GetString((Invoke-WebRequest $url).Content) | ConvertFrom-Json 它抛出: 如果我使用Unicode或UTF8,它会引发相同的异常 但如果我使用浏览器下载文件并查找文件中的字符,则文件中没有此类字符。此外,如果您尝试将保存的文件转换为json对象,它也会正常工作: Get-Cont

我试图从url下载json文件,并使用以下引发异常的代码将其转换为json对象:

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

如果我使用
Unicode
UTF8
,它会引发相同的异常

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

Get-Content $localFilePath | ConvertFrom-Json
为什么我会收到此例外情况?

如何在不保存到文件的情况下获取文件内容并将其从Json传递到
ConvertFrom
而不会出现问题?

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

[System.Net.WebClient]::new().DownloadString($url) | ConvertFrom-Json
问题是因为UTF8编码的文件开头存在字符。如果您通过以下方式从url获取文件内容:

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

当使用浏览器保存文件时,您将在文件的开头看到
ï»
,但无法看到这样的顺序。

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

[System.Net.WebClient]::new().DownloadString($url) | ConvertFrom-Json
问题是因为UTF8编码的文件开头存在字符。如果您通过以下方式从url获取文件内容:

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

您将在文件的开头看到
ï»
,而在使用浏览器保存文件时,您看不到这样的顺序。

您可以使用Invoke Rest方法,该方法只提供您试图从中获取数据的站点的其余内容。没有头球。@thomschumacher这与头球无关<代码>(调用WebRequest$url)。内容不包括标题。只是满足而已。即使使用
Invoke RestMethod
也会收到相同的异常。问题在于内容开头的BOM。我想说的是您应该能够使用
[System.Text.UTF8Encoding]::new($true).GetString((Invoke WebRequest$url.content)
,但是。。。您究竟是如何调用
Invoke WebRequest
并在
Content
中获取字节数组的
Invoke WebReqest
返回一个
Microsoft.PowerShell.Commands.HtmlWebResponseObject
Microsoft.PowerShell.Commands.HtmlWebResponseObject.Content
的类型为
string
,而
System.Text.Encoding.GetString()
没有
string
重载?不管怎样,我已经解决了。文档说,
Invoke WebRequest
总是返回一个
HtmlWebResponseObject
,但事实并非如此。它还可以返回
WebResponseObject
@BaconBits
(调用WebRequest$url)。Content
是一个字节数组。您可以使用Invoke-Rest方法,该方法只提供您试图从中获取数据的站点的其余内容。没有头球。@thomschumacher这与头球无关<代码>(调用WebRequest$url)。内容不包括标题。只是满足而已。即使使用
Invoke RestMethod
也会收到相同的异常。问题在于内容开头的BOM。我想说的是您应该能够使用
[System.Text.UTF8Encoding]::new($true).GetString((Invoke WebRequest$url.content)
,但是。。。您究竟是如何调用
Invoke WebRequest
并在
Content
中获取字节数组的
Invoke WebReqest
返回一个
Microsoft.PowerShell.Commands.HtmlWebResponseObject
Microsoft.PowerShell.Commands.HtmlWebResponseObject.Content
的类型为
string
,而
System.Text.Encoding.GetString()
没有
string
重载?不管怎样,我已经解决了。文档说,
Invoke WebRequest
总是返回一个
HtmlWebResponseObject
,但事实并非如此。它还可以返回一个
WebResponseObject
@BaconBits
(调用WebRequest$url)。Content
是一个字节数组。