代码之家  ›  专栏  ›  技术社区  ›  vin_Bin87

Powershell Invoke WebRequest返回一个对象数组,但处理过程就像只有1个对象一样

  •  0
  • vin_Bin87  · 技术社区  · 5 年前
    $path = "https://api.statuspage.io/v1/pages/$page_id/$endpoint"
    $req  = Invoke-WebRequest -Uri $path -Method GET
    

    此请求返回一个对象数组(50+)。我可以通过运行 Write-Host $req

    问题是,当我尝试像

    foreach($i in $req) {
      Write-Host $i
    }
    

    我得到了整个物体。同样,如果我跑 Write-Host $req.length 我被给予 1 .有什么好处?

    此外,没有办法运行类似这样的操作

    $global:res = ConvertFrom-Json $req
    

    因为它已经作为JSON返回了

    0 回复  |  直到 5 年前
        1
  •  1
  •   mklement0    5 年前

    如果你的目的是 将JSON文本解析为(嵌套的) 物体 ( [pscustomobject] (图表) 不管怎样,你可以 使用 Invoke-RestMethod 而不是 Invoke-WebRequest 因为 调用rest方法 ConvertFrom-Json 内置的 ,可以说:

    $path = "https://api.statuspage.io/v1/pages/$page_id/$endpoint"
    
    # Retrieves JSON *and* parses it into objects.
    $result = Invoke-RestMethod -Uri $path -Method GET
    

    至于 你试过什么 :

    $req = Invoke-WebRequest ...

    调用WebRequest 返回一个 仅有一个的 对象,即 BasicHtmlWebResponseObject (PowerShell[Core]v6+)/ HtmlWebResponseObject (Windows PowerShell),这是一个包含元数据的包装器对象,用于存储 所容纳之物 在报告中收到的回复 .Content 所有物

    就你而言, 所容纳之物 包含JSON作为 单串 哪一个 从Json转换 可以解析为嵌套的 对象 (s) 。

    将此JSON字符串解析为一个或多个(可能是嵌套的)对象( [pscustomobject] 图表):

    $result = ConvertFrom-Json $req.Content
    

    注意,即使 $result = ConvertFrom-Json $req 会起作用,因为当响应对象隐式 严格化 ,它会插值到其 所容纳之物 所有物

    Theo 在评论中指出,你也可以使用管道:

    $result = $req | ConvertFrom-Json