使用 PowerShell 解析 JSON 文件
许多 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_url
和 name
属性。
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)"
相关文章
在 Windows PowerShell 中获取命令行参数
发布时间:2024/03/04 浏览次数:358 分类:编程语言
-
本文将解释我们如何使用 PowerShell 的参数函数处理命令行参数,参数如何工作,我们如何使用 PowerShell 参数将值传递给参数,以及定义参数的基本方法是什么。
Windows PowerShell 中的 Base64 编码
发布时间:2024/03/04 浏览次数:332 分类:编程语言
-
本文将展示如何编码和解码 base64 字符串。Windows PowerShell 当前版本没有本机命令,因此我们将向你展示如何执行此操作的替代方法。
在 Windows PowerShell 中写入输出
发布时间:2024/03/04 浏览次数:259 分类:编程语言
-
本文将向你展示如何在 Windows PowerShell 中编写或打印输出。本文还将区分多个 write cmdlet 并解释它们的意义。
在 Windows PowerShell 中设置 PATH 环境变量
发布时间:2024/03/04 浏览次数:350 分类:编程语言
-
本文将展示在 Windows PowerShell 中设置路径环境变量的正确方法。本文还展示了如何在持久性和非持久性方法中设置变量。
在 Windows PowerShell 中打印环境变量
发布时间:2024/03/04 浏览次数:869 分类:编程语言
-
本文将讨论什么是环境变量以及如何使用多个 Windows PowerShell 命令打印它们。
在 PowerShell 中注释代码
发布时间:2024/03/04 浏览次数:363 分类:编程语言
-
本文将展示在 Windows PowerShell 中注释代码的多种方法。本文还介绍了注释代码时的一些最佳实践。
在 PowerShell 中执行 LDAP 查询
发布时间:2024/03/04 浏览次数:304 分类:编程语言
-
本文将深入了解如何使用 Active Directory 过滤器和 LDAP 过滤器。