【问题标题】:ConvertFrom-Json : Error during serialization or deserialization using the JSON JavaScriptSerializerConvertFrom-Json:使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错
【发布时间】:2017-10-01 16:39:23
【问题描述】:

我有一个 API,当我运行 PowerShell 脚本时:

Invoke-WebRequest 'https://api.tfl.gov.uk/Place/Type/OysterTicketShop'|ConvertFrom-Json

我得到错误:

ConvertFrom-Json : 使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了 maxJsonLength 属性上设置的值。参数名称:input At line:2 char:72 + Invoke-WebRequest 'https://api.tfl.gov.uk/Place/Type/OysterTicketShop'|ConvertFr ... + ~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [ConvertFrom-Json], ArgumentException + FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.ConvertFromJsonCommand

我的理解是 API 相当大,但我无法解决问题。

我尝试使用:

Invoke-WebRequest 'https://api.tfl.gov.uk/Place/Type/OysterTicketShop'|ConvertFrom-Json 
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Web.Extensions")
$jsonserial= New-Object -TypeName System.Web.Script.Serialization.JavaScriptSerializer 
$jsonserial.MaxJsonLength = $somevalue 
$Obj = $jsonserial.DeserializeObject($rawtext) 
$jsonserial.MaxJsonLength = [int]::MaxValue

我仍然遇到同样的错误。

【问题讨论】:

  • 我编辑并格式化了代码。请检查我是否删除或添加了一些有害的空格。

标签: powershell powershell-3.0 powershell-4.0


【解决方案1】:

这里有几个问题。

Invoke-WebRequest 'https://api.tfl.gov.uk/Place/Type/OysterTicketShop'|ConvertFrom-Json 

您在这里仍然使用相同的方法。然后似乎您在其下粘贴了一些相关的代码。 $rawtext$somevalue 有什么作用?

$jsonserial.MaxJsonLength = $somevalue 
$Obj = $jsonserial.DeserializeObject($rawtext) 
$jsonserial.MaxJsonLength = [int]::MaxValue

MaxJsonLength 不需要修改两次,尤其是反序列化之后。

由于长度限制,您想要删除 ConvertFrom-Json cmdlet,并为 JavaScriptSerializer 使用 webrequest 响应。

$url = "https://api.tfl.gov.uk/Place/Type/OysterTicketShop"
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Web.Extensions")
$jsonserial = New-Object -TypeName System.Web.Script.Serialization.JavaScriptSerializer
$jsonserial.MaxJsonLength = [int]::MaxValue
#Because of SSL requirements
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
#Getting webresponse/JSON data, stored in a varibale
$content = (Invoke-WebRequest $url).Content
#Deserializing the JSON data
$Obj = $jsonserial.DeserializeObject($content)

【讨论】:

    【解决方案2】:

    Welp,如果你按照上面的逻辑,你正在尝试从 JSON 转换 webrequest 对象,但它不是。如果正文是 JSON 中的内容,那么您需要执行以下操作。

    ConvertFrom-Json (Invoke-WebRequest 'https://api.tfl.gov.uk/Place/Type/OysterTicketShop').Content
    

    就是这样。

    【讨论】:

      猜你喜欢
      • 2021-09-02
      • 2015-01-11
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 2013-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多