对象,该对象具有 JSON 字符串中每个字段的属性。
网站通常使用 JSON 来提供对象的文本表示形式。 该 cmdlet 将属性添加到新对象,因为它处理 JSON 字符串的每一行。
Get-Date | Select-Object -Property * | ConvertTo-Json | ConvertFrom-Json
DisplayHint : 2
DateTime : Monday, January 29, 2024 3:10:26 PM
Date : 1/29/2024 12:00:00 AM
Day : 29
DayOfWeek : 1
DayOfYear : 29
Hour : 15
Kind : 2
Millisecond : 931
Microsecond : 47
Nanosecond : 600
Minute : 10
Month : 1
Second : 26
Ticks : 638421378269310476
TimeOfDay : @{Ticks=546269310476; Days=0; Hours=15; Milliseconds=931; Microseconds=47;
Nanoseconds=600; Minutes=10; Seconds=26; TotalDays=0.632256146384259;
TotalHours=15.1741475132222; TotalMilliseconds=54626931.0476;
TotalMicroseconds=54626931047.6; TotalNanoseconds=54626931047600;
TotalMinutes=910.448850793333; TotalSeconds=54626.9310476}
Year : 2024
该示例使用
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,该 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,该 cmdlet 将其转换为自定义对象。
示例 4:将 JSON 字符串转换为哈希表
此命令显示了一个示例,其中
-AsHashtable
开关可以克服命令的限制。
'{ "key":"value1", "Key":"value2" }' | ConvertFrom-Json -AsHashtable
JSON 字符串包含两个键值对,其中键仅大小写不同。 如果没有开关,该命令将引发错误。
示例 5:循环单个元素数组
此命令展示了一个示例,其中使用
-NoEnumerate
选项来实现对单个元素 JSON 数组的往返转换。
Write-Output "With -NoEnumerate: $('[1]' | ConvertFrom-Json -NoEnumerate |
ConvertTo-Json -Compress)"
Write-Output "Without -NoEnumerate: $('[1]' | ConvertFrom-Json |
ConvertTo-Json -Compress)"
With -NoEnumerate: [1]
Without -NoEnumerate: 1
JSON 字符串包含具有单个元素的数组。 如果不使用开关,将 JSON 转换为 PSObject 然后用
ConvertTo-Json
命令转换回来会产生一个单一的整数。
-AsHashtable
将 JSON 转换为哈希表对象。 PowerShell 6.0 中引入了此开关。 从 PowerShell 7.3 开始,对象是
OrderHashtable
,并保留 JSON 中的键排序。 在早期版本中,对象是
哈希表
。
有几个方案可以克服
ConvertFrom-Json
cmdlet 的某些限制。
如果没有此开关,当 JSON 对象中的两个或多个键不区分大小写时,它们被视为相同的键。 在这种情况下,转换后的对象中仅包含那些不区分大小写的相同键中的最后一个。
如果没有此开关,只要 JSON 包含键是空字符串,该 cmdlet 将引发错误。
PSCustomObject
不能具有空字符串的属性名称。 例如,这可能发生在
project.lock.json
文件中。
哈希表可以更快地处理某些数据结构。
类型:
Microsoft.PowerShell.Commands.JsonDateKind
接受的值:Default, Local, Utc, Offset, String
Position:Named
默认值:Default
必需:False
接受管道输入:False
接受通配符:False
-Depth
获取或设置允许 JSON 输入的最大深度。 默认值为 1024。
此参数是在 PowerShell 6.2 中引入的。
类型:
Int32
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False
指定要转换为 JSON 对象的 JSON 字符串。 输入包含字符串的变量,或键入获取字符串的命令或表达式。 还可以通过管道将字符串传递给
ConvertFrom-Json
。
InputObject
参数是必需的,但其值可以是空字符串。 当输入对象为空字符串时,
ConvertFrom-Json
不会生成任何输出。
的 InputObject
值不能是
$null
。
类型:
String
Position:0
默认值:None
必需:True
接受管道输入:True
接受通配符:False
-NoEnumerate
指定输出不被枚举。
设置此参数会导致数组作为单个对象发送,而不是单独发送每个元素。 这保证了 JSON 可以通过
ConvertTo-Json
进行往返。
类型:
SwitchParameter
Position:Named
默认值:False
必需:False
接受管道输入:False
接受通配符:False
String
可以通过管道将 JSON 字符串传递给
ConvertFrom-Json
。
PSCustomObject
OrderedHashtable
此 cmdlet 是使用
Newtonsoft Json.NET
实现的。
从 PowerShell 6 开始,
ConvertTo-Json
尝试将格式化为时间戳的字符串转换为
DateTime
值。
PowerShell 7.5 添加了
DateKind
参数,可用于控制时间戳字符串的转换方式。 该参数接受以下值:
Default
- 根据以下规则将时间戳转换为
[datetime]
实例:
-
如果输入字符串中没有时区信息,则 Json.NET 序列化程序会将该值转换为未指定的时间值。
-
如果时区信息的尾部是
Z
,则 Json.NET 序列化程序会将时间戳转换为
UTC
值。
-
如果时间戳包含 UTC 偏移量(如
+02:00
),则偏移量将转换为调用方配置的时区。 默认输出格式不指示原始时区偏移量。
Local
- 将时间戳转换为
[datetime]
时间中的
实例。 如果时间戳包含 UTC 偏移量,则偏移量将转换为调用方配置的时区。 默认输出格式不指示原始时区偏移量。
Utc
- 以 UTC 时间将值转换为
[datetime]
实例。
Offset
- 将时间戳转换为
[DateTimeOffset]
实例,并在该实例中保留原始字符串的时区偏移量。 如果原始字符串不包含时区偏移量,则会在本地时区中指定
DateTimeOffset
值。
String
- 保留
[string]
实例的值。 这可确保任何自定义分析逻辑都可以应用于原始字符串值。
PSObject
类型维护 JSON 字符串中显示的属性顺序。
从 PowerShell 7.3 开始,
AsHashtable
参数将创建
OrderedHashtable
。 键值对按 JSON 字符串中显示的顺序添加。
有序哈希表
保留该顺序。
-
JavaScript 和 .NET 中的 JavaScript 对象表示法(JSON)简介
-
ConvertTo-Json
-
Invoke-WebRequest
-
Invoke-RestMethod
-
DateTimeOffset