ZetCode

PowerShell ConvertFrom-Json

最后修改:2025 年 2 月 15 日

在本文中,我们将介绍 PowerShell 中的 ConvertFrom-Json cmdlet。此 cmdlet 将 JSON 格式的字符串转换为 PowerShell 对象。它能够轻松地在脚本中解析和操作 JSON 数据。

JSON 基础知识

JSON(JavaScript 对象表示法)是一种轻量级的数据交换格式。它使用人类可读的文本来存储和传输数据对象。JSON 以键值对和有序列表的形式表示数据。PowerShell 可以通过 ConvertFrom-Json cmdlet 使用 JSON 数据。

ConvertFrom-Json 的基本用法

使用 ConvertFrom-Json 的最简单方法是使用 JSON 字符串。该 cmdlet 解析字符串并返回一个 PowerShell 对象。然后,此对象可以像任何其他 PowerShell 对象一样进行操作。JSON 必须格式正确。

json1.ps1
$json = '{"name":"John","age":30,"city":"New York"}'
$obj = $json | ConvertFrom-Json
$obj

此命令将一个简单的 JSON 字符串转换为 PowerShell 对象。可以使用点表示法访问对象的属性。输出显示了解析后的数据。

访问 JSON 对象属性

将 JSON 转换为对象后,您可以直接访问其属性。使用点表示法引用嵌套属性。这允许轻松地从复杂的 JSON 结构中提取数据。属性名称区分大小写。

json2.ps1
$json = '{"user":{"name":"Alice","email":"alice@example.com"}}'
$obj = $json | ConvertFrom-Json
$obj.user.name
$obj.user.email

此示例显示了如何访问嵌套的 JSON 属性。用户对象包含 name 和 email 属性。这些属性通过点表示法访问。

处理 JSON 数组

JSON 数组会被转换为 PowerShell 对象数组。您可以遍历它们或按索引访问元素。数组会保留其在 JSON 源中的顺序。这对于处理项目列表很有用。

json3.ps1
$json = '["red","green","blue"]'
$colors = $json | ConvertFrom-Json
$colors[0]
$colors | ForEach-Object { "Color: $_" }

此示例演示了如何处理 JSON 数组。第一个元素通过索引访问。然后,在循环中处理所有元素。

解析复杂的 JSON 结构

ConvertFrom-Json 可以处理嵌套对象和数组。复杂的 JSON 结构会转换为具有嵌套属性的 PowerShell 对象。这会保留原始数据层次结构。您可以使用点表示法浏览结构。

json4.ps1
$json = '{
  "employees": [
    {"name":"John", "skills":["PowerShell","C#"]},
    {"name":"Jane", "skills":["Python","SQL"]}
  ]
}'
$obj = $json | ConvertFrom-Json
$obj.employees[0].name
$obj.employees[1].skills[0]

此示例解析了一个复杂的 JSON 结构。它包含一个员工对象数组,其中包含嵌套的技能数组。通过链式点表示法访问特定值。

从文件读取 JSON

JSON 数据通常来自文件。首先使用 Get-Content 读取文件。然后将内容通过管道传递给 ConvertFrom-Json。这是处理配置文件或 API 响应的常用工作流程。

json5.ps1
$jsonContent = Get-Content -Path "config.json" -Raw
$config = $jsonContent | ConvertFrom-Json
$config.settings

此脚本从文件读取 JSON 并将其转换为对象。-Raw 参数确保整个文件被读取为单个字符串。然后,配置对象可以在整个脚本中使用。

处理大型 JSON 数据

对于大型 JSON 文件,请使用 -Depth 参数。它控制转换多少层嵌套对象。默认深度为 1024。这可以防止非常深的结构导致堆栈溢出错误。

json6.ps1
$bigJson = Get-Content -Path "large_data.json" -Raw
$data = $bigJson | ConvertFrom-Json -Depth 50
$data.items[0].details

此示例显示了如何处理大型 JSON 文件。-Depth 参数设置为处理深度嵌套。然后访问第一个项目的详细信息。

使用 ConvertFrom-Json 进行错误处理

无效的 JSON 会导致解析错误。使用 try/catch 块可以优雅地处理这些错误。这确保了您的脚本能够对格式不正确的输入做出适当的响应。请始终尽可能验证 JSON 数据。

json7.ps1
$badJson = '{"name": "Bob", "age": }'
try {
    $obj = $badJson | ConvertFrom-Json
    $obj
}
catch {
    Write-Host "Error parsing JSON: $_"
}

此示例演示了错误处理。格式错误的 JSON 会触发异常。catch 块会显示用户友好的错误消息。

来源

PowerShell 文档

在本文中,我们介绍了 PowerShell 中的 ConvertFrom-Json cmdlet。

作者

我的名字是 Jan Bodnar,我是一名充满激情的程序员,拥有丰富的编程经验。我自 2007 年以来一直撰写编程文章。至今,我已撰写了 1400 多篇文章和 8 本电子书。我在教学编程方面拥有十多年的经验。

列出 所有 PowerShell 教程