ConvertFrom-Json
将 JSON 格式的字符串转换为自定义对象。
语法
ConvertFrom-Json
[-InputObject] <String>
[<CommonParameters>]
说明
ConvertFrom-Json
cmdlet 将 JavaScript 对象表示法 (JSON) 格式的字符串转换为自定义 PSObject 或 Hashtable 对象,该对象具有 JSON 字符串中每个字段的属性。
JSON 通常可供网站使用,以提供对象的文本表示形式。 该 cmdlet 会在处理 JSON 字符串的每一行时,将属性添加到新对象。
JSON 标准允许在 PSObject 和 Hashtable 类型中禁止重复的键名称。 例如,如果 JSON 字符串包含重复键,则此 cmdlet 将仅使用最后一个键。 请参阅下面的其他示例。
若要从任何对象生成 JSON 字符串,请使用 ConvertTo-Json
cmdlet。
此 cmdlet 是在 PowerShell 3.0 中引入的。
注意
从 PowerShell 6 开始,cmdlet 支持带有注释的 JSON。 JSON 注释以两个正斜杠 (//
) 字符开头。 JSON 注释不会在 cmdlet 输出的对象中捕获。 在 PowerShell 6 之前,ConvertFrom-Json
在遇到 JSON 注释时会返回错误。
示例
示例 1:将 DateTime 对象转换为 JSON 对象
此命令使用 ConvertTo-Json
和 ConvertFrom-Json
cmdlet 将 DateTime 对象从 Get-Date
cmdlet 转换为 JSON 对象,然后转换为 PSCustomObject。
Get-Date | Select-Object -Property * | ConvertTo-Json | ConvertFrom-Json
DisplayHint : 2
DateTime : Friday, January 13, 2012 8:06:31 PM
Date : 1/13/2012 8:00:00 AM
Day : 13
DayOfWeek : 5
DayOfYear : 13
Hour : 20
Kind : 2
Millisecond : 400
Minute : 6
Month : 1
Second : 31
Ticks : 634620819914009002
TimeOfDay : @{Ticks=723914009002; Days=0; Hours=20; Milliseconds=400; Minutes=6; Seconds=31; TotalDays=0.83786343634490734; TotalHours=20.108722472277776; TotalMilliseconds=72391400.900200009; TotalMinutes=1206.5233483366667;TotalSeconds=72391.4009002}
Year : 2012
该示例使用 Select-Object
cmdlet 获取 DateTime 对象的所有属性。 它使用 ConvertTo-Json
cmdlet 将 DateTime 对象转换为 JSON 对象格式的字符串,并使用 ConvertFrom-Json
cmdlet 将 JSON 格式的字符串转换为 PSCustomObject 对象。
示例 2:从 Web 服务获取 JSON 字符串并将其转换为 PowerShell 对象
此命令使用 Invoke-WebRequest
cmdlet 从 Web 服务获取 JSON 字符串,然后使用 ConvertFrom-Json
cmdlet 将 JSON 内容转换为可在 PowerShell 中管理的对象。
# Ensures that Invoke-WebRequest uses TLS 1.2
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$j = Invoke-WebRequest 'https://api.github.com/repos/PowerShell/PowerShell/issues' | ConvertFrom-Json
还可以使用 Invoke-RestMethod
cmdlet,它会自动将 JSON 内容转换为对象。
示例 3:将 JSON 字符串转换为自定义对象
此示例演示如何使用 ConvertFrom-Json
cmdlet 将 JSON 文件转换为 PowerShell 自定义对象。
Get-Content -Raw JsonFile.JSON | ConvertFrom-Json
该命令使用 Get-Content cmdlet 获取 JSON 文件中的字符串。 Raw 参数会将整个文件作为单个 JSON 对象返回。 然后,使用管道运算符将分隔的字符串发送到 ConvertFrom-Json
cmdlet,后者可将其转换为自定义对象。
参数
-InputObject
指定要转换为 JSON 对象的 JSON 字符串。 输入一个包含字符串的变量,或键入可获取字符串的命令或表达式。 还可以通过管道将字符串传递给 ConvertFrom-Json
。
InputObject 参数是必需的,但其值可以是空字符串。 当输入对象为空字符串时,ConvertFrom-Json
不会生成任何输出。 InputObject 值不能为 $null
。
类型: | String |
Position: | 0 |
默认值: | None |
必需: | True |
接受管道输入: | True |
接受通配符: | False |
输入
可以通过管道将 JSON 字符串传递给 ConvertFrom-Json
。
输出
PSCustomObject
备注
ConvertFrom-Json
cmdlet 是使用 JavaScriptSerializer 类实现的。
PSObject 类型维护 JSON 字符串中显示的属性顺序。 虽然键值对按照 JSON 字符串中显示的顺序添加到 Hashtable,但 Hashtable 对象不会保持该顺序。