迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 >

使用 PowerShell 解析 JSON 文件

作者:迹忆客 最近更新:2024/02/29 浏览次数:

许多 API 使用称为 REST 的协议。REST APIs 主要通过 Javascript 对象表示法或简单的 JSON 以一种语言进行交谈。

本文展示了如何使用 Windows PowerShell 直接与 REST API 对话并将数据转换为有用的东西。

JSON 是一种缩小人类可读数据和机器可读数据之间差距的方法。

在结构化数据对象之前,大多数操作系统依赖于文本解析工具,这些工具使用复杂的正则表达式 regex 来为简单文本带来结构。

我们现在可以使用 JSON 创建一个人类和程序都可以相对轻松地读取的字符串。

{
    "string": "this is a string. backslashes (\\) have to be escaped",
    "object": {
        "description": "This is a sample object nested inside our javascript object. Description is a string subproperty"
    },
    "numbers": 12345,
    "array": ["a string", "another string"]
}

JSON 易于读写,尽管有许多引号、逗号、括号和转义字符。


在 PowerShell 中下载 JSON 文件

首先,从 GitHub 获取一个使用 Invoke-RestMethod 命令的示例 JSON 到 PowerShell。

但是,了解如何转换 JSON 字符串仍然很重要。


在 PowerShell 中使用 Invoke-Request 命令

要使用 Windows PowerShell 查询 API 并获取一些 JSON 作为回报,请使用 Invoke-WebRequest 命令。

此命令可以通过 HTTP 查询任何 Web 服务或站点并返回信息(不仅仅是 JSON)。我们将使用这个示例来获取一些可以使用的 JSON。

  • 打开 PowerShell 控制台。
  • 运行 Invoke-WebRequest 命令查询 GitHub API,如下图所示。下面的代码片段将 cmdlet 返回的所有输出分配给 $webData 变量进行处理。
$webJSONData = Invoke-WebRequest -Uri "https://api.github.com/repos/PowerShell/PowerShell/releases/latest"

执行 ConvertFrom-Json 命令将存储在 content 属性中的 JSON 字符串转换为 PowerShell 对象。

$releases = ConvertFrom-Json $webJSONData.content

通过管道将 Windows PowerShell 对象传递给 Get-Member 命令。当你这样做时,我们将看到该对象是 System.Management.Automation.PSCustomObject 类型;不仅仅是一个简单的字符串。

$releases | Get-Member

使用 Invoke-RestMethod Cmdlet

使用 Invoke-RestMethod 命令与 Invoke-WebRequest 非常相似。它只消除了一行代码。

该 cmdlet 将自动假定一个 JSON 响应并为你转换它。

它在代码中阐明了你期望使用 API,并且你还期望 JSON 响应。

  • 打开你的 PowerShell 控制台
  • 运行 Invoke-RestMethod 获取发布信息
$releases_2 = Invoke-RestMethod -Uri "https://api.github.com/repos/PowerShell/PowerShell/releases/latest"

通过管道将 Windows PowerShell 对象传递给 Get-Member 命令。当你这样做时,我们将看到该对象是 System.Management.Automation.PSCustomObject 类型;不仅仅是一个简单的字符串。

$releases_2 | Get-Member

使用 PowerShell 解析 JSON 文件

让我们看一下上一节中定义的 $releases 变量。两个突出的属性是 browser_download_urlname 属性。

browser_download_url 属性与 URL 相关,而 name 属性可能与版本名称相关。

现在输出所有的 name 属性,如下所示。

$releases_2.assets.name 

在 PowerShell 中使用 Invoke-WebRequest 下载过滤后的对象

## Using Invoke-RestMethod
$webAPIData = Invoke-RestMethod -Uri "https://api.github.com/repos/PowerShell/PowerShell/releases/latest"

## Using Invoke-WebRequest
$webAPIData = ConvertFrom-JSON (Invoke-WebRequest -uri "https://api.github.com/repos/PowerShell/PowerShell/releases/latest")

## The download information is stored in the "assets" section of the data
$assets = $webAPIData.assets

## The pipeline operator is used to filter the assets object to find the release version
$asset = $assets | where-object { $_.name -match "win-x64" -and $_.name -match ".zip"}

## Download the latest version
Write-output "Downloading $($asset.name)"
Invoke-WebRequest $asset.browser_download_url -OutFile "$pwd\$($asset.name)"

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 Windows PowerShell 中终止脚本

发布时间:2024/02/29 浏览次数:91 分类:编程语言

本文将列举几种在 Windows PowerShell 中终止脚本的方法。本文将解释和定义所有几个命令,并引用示例脚本块来说明在何处使用它们。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便