Powershell ConvertFrom Json:无效的Json原语:ï;
我试图从url下载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
[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
是一个字节数组。