json 调用powershell函数内的API

dpiehjr4  于 2022-12-05  发布在  Shell
关注(0)|答案(1)|浏览(163)

如何调用函数内部的API。这是我的url https://www.gov.uk/bank-holidays.json。我是powershell的新手,你能帮我做到这一点吗?

function Holiday {
 
   $list = Invoke-RestMethod -Method Get -Uri https://www.gov.uk/bank-holidays.json
   Write-Host "$list"

}

但是我不能上市,你能帮我一下吗

des4xlb0

des4xlb01#

Invoke-RestMethod自动将API的JSON响应解析为一个对象[graph]-一个嵌套的[pscustomobject]示例或数组(可以说,Invoke-RestMethod内置了ConvertFrom-Json)。

虽然对于后续的OO * 处理非常方便,但是结果对象的显示表示 * 并不是很有帮助

  • 仅打印对象图的 * 顶级属性 *。
  • 由于长期存在的错误(请参阅GitHub issue #6163),嵌套属性值可能会错误地显示为空(请参阅this answer以获取示例)。
    要快速 * 可视化 * 结果,您可以使用ConvertTo-Json简单地转换 * 回JSON*:
function Get-Holiday {
 
  # Call the API, which returns JSON that is parsed into a [pscustomobject]
  # graph, and return (output) the result.
  Invoke-RestMethod -Method Get -Uri https://www.gov.uk/bank-holidays.json

}

$list = Get-Holiday

# Visualize the object for display by converting it back to JSON.
$list | ConvertTo-Json -Depth 3
  • 请注意,不幸地需要显式指定-Depth 3-有关背景信息,请参见this post
    另一种可视化方式可通过管道连接到**Format-Custom**来实现:
  • 最终得到的for-display表示不是JSON,而是一种类似于哈希表文字的符号,并且很容易进行可视化解析。
  • Format-Custom的默认深度是5(ConvertTo-Json的默认深度是2),所以通常不需要-Depth参数就可以成功。
  • 然而,相反地,您可能需要(临时地)设置$FormatEnumerationLimit首选项变量,以确保 collection 的所有元素都是可视化的;默认情况下,只有 4 是,省略的元素表示为

也就是说,如果你只是想快速了解对象图的 * 结构 *,那可能不是问题。

# Assumes that $list was obtained as above.
$list | Format-Custom

输出(仅显示 * 第一个 * 对象;请注意,它指示.events属性中包含的集合具有被省略的其他元素):

class PSCustomObject
{
  england-and-wales =
    class PSCustomObject
    {
      division = england-and-wales
      events =
        [
          class PSCustomObject
          {
            title = New Year’s Day
            date = 2018-01-01
            notes =
            bunting = True
          }
          class PSCustomObject
          {
            title = Good Friday
            date = 2018-03-30
            notes =
            bunting = False
          }
          class PSCustomObject
          {
            title = Easter Monday
            date = 2018-04-02
            notes =
            bunting = True
          }
          class PSCustomObject
          {
            title = Early May bank holiday
            date = 2018-05-07
            notes =
            bunting = True
          }
          …
        ]

    }

关于 processing,下面是访问英格兰和威尔士的第一个条目的示例:

$list.'england-and-wales'.events[0]

以上结果为:

title          date       notes bunting
-----          ----       ----- -------
New Year’s Day 2015-01-01          True

相关问题