ConvertTo-Json
将对象转换为 JSON 格式的字符串。
语法
ConvertTo-Json
[-InputObject] <Object>
[-Depth <Int32>]
[-Compress]
[-EnumsAsStrings]
[-AsArray]
[-EscapeHandling <StringEscapeHandling>]
[<CommonParameters>]
说明
ConvertTo-Json
cmdlet 将任何 .NET 对象转换为 JavaScript 对象表示法 (JSON) 格式的字符串。 这些属性将转换为字段名称,字段值将转换为属性值,并删除方法。
注意
从 PowerShell 7.2 开始,DateTime 和 String 对象的扩展类型系统属性不再序列化,并且仅将简单对象转换为 JSON 格式
然后,可以使用 ConvertFrom-Json
cmdlet 将 JSON 格式的字符串转换为可在 PowerShell 中轻松管理的 JSON 对象。
许多网站使用 JSON 而不是 XML 来序列化数据,以便在服务器和基于 Web 的应用之间进行通信。
从 PowerShell 7.1 起,如果输入对象的深度超出命令指定的深度,ConvertTo-Json
发出警告。 这可以防止在转换对象时丢失不必要的数据丢失。
从 PowerShell 7.5-preview.3 起,ConvertTo-Json
可以将 bigInteger 值序列化为原始 JSON 数字。
此 cmdlet 已在 Windows PowerShell 3.0 中引入。
示例
示例 1
(Get-UICulture).Calendar | ConvertTo-Json
{
"MinSupportedDateTime": "0001-01-01T00:00:00",
"MaxSupportedDateTime": "9999-12-31T23:59:59.9999999",
"AlgorithmType": 1,
"CalendarType": 1,
"Eras": [
1
],
"TwoDigitYearMax": 2029,
"IsReadOnly": true
}
此命令使用 ConvertTo-Json
cmdlet 将 GregorianCalendar 对象转换为 JSON 格式的字符串。
示例 2
Get-Date | ConvertTo-Json; Get-Date | ConvertTo-Json -AsArray
"2021-08-05T16:13:05.6394416-07:00"
[
"2021-08-05T16:13:05.6421709-07:00"
]
此示例演示 ConvertTo-Json
cmdlet 的输出,以及不使用 AsArray switch 参数。 可以看到输出的第二部分包装在数组括号中。
示例 3
@{Account="User01";Domain="Domain01";Admin="True"} | ConvertTo-Json -Compress
{"Domain":"Domain01","Account":"User01","Admin":"True"}
此命令显示使用 ConvertTo-Json
的 Compress 参数的效果。 压缩仅影响字符串的外观,而不会影响其有效性。
示例 4
Get-Date | Select-Object -Property * | ConvertTo-Json
{
"DisplayHint": 2,
"DateTime": "October 12, 2018 10:55:32 PM",
"Date": "2018-10-12T00:00:00-05:00",
"Day": 12,
"DayOfWeek": 5,
"DayOfYear": 285,
"Hour": 22,
"Kind": 2,
"Millisecond": 639,
"Minute": 55,
"Month": 10,
"Second": 32,
"Ticks": 636749817326397744,
"TimeOfDay": {
"Ticks": 825326397744,
"Days": 0,
"Hours": 22,
"Milliseconds": 639,
"Minutes": 55,
"Seconds": 32,
"TotalDays": 0.95523888627777775,
"TotalHours": 22.925733270666665,
"TotalMilliseconds": 82532639.774400011,
"TotalMinutes": 1375.54399624,
"TotalSeconds": 82532.6397744
},
"Year": 2018
}
此示例使用 ConvertTo-Json
cmdlet 将 System.DateTime 对象从 Get-Date
cmdlet 转换为 JSON 格式的字符串。 该命令使用 Select-Object
cmdlet 来获取 DateTime 对象的所有属性(*
)。 输出显示 ConvertTo-Json
返回的 JSON 字符串。
示例 5
Get-Date | Select-Object -Property * | ConvertTo-Json | ConvertFrom-Json
DisplayHint : 2
DateTime : October 12, 2018 10:55:52 PM
Date : 2018-10-12 12:00:00 AM
Day : 12
DayOfWeek : 5
DayOfYear : 285
Hour : 22
Kind : 2
Millisecond : 768
Minute : 55
Month : 10
Second : 52
Ticks : 636749817527683372
TimeOfDay : @{Ticks=825527683372; Days=0; Hours=22; Milliseconds=768; Minutes=55; Seconds=52;
TotalDays=0.95547185575463; TotalHours=22.9313245381111; TotalMilliseconds=82552768.3372;
TotalMinutes=1375.87947228667; TotalSeconds=82552.7683372}
Year : 2018
此示例演示如何使用 ConvertTo-Json
和 ConvertFrom-Json
cmdlet 将对象转换为 JSON 字符串和 JSON 对象。
参数
-AsArray
输出数组括号中的对象,即使输入是单个对象。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Compress
省略输出字符串中的空格和缩进格式。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Depth
指定 JSON 表示形式中包含多少个包含对象的级别。 该值可以是从 0
到 100
的任何数字。 默认值为 2
。 如果输入对象中的级别数超过此数字,ConvertTo-Json
发出警告。
类型: | Int32 |
Position: | Named |
默认值: | 2 |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-EnumsAsStrings
提供将所有枚举转换为其字符串表示形式的替代序列化选项。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-EscapeHandling
控制在生成的 JSON 输出中转义某些字符的方式。 默认情况下,仅转义控件字符(如换行符)。
可接受的值为:
- 默认值 - 仅转义控制字符。
- EscapeNonAscii - 将转义所有非 ASCII 和控制字符。
- EscapeHtml - HTML(
<
、>
、&
、'
、"
)和控件字符被转义。
此参数是在 PowerShell 6.2 中引入的。
类型: | Newtonsoft.Json.StringEscapeHandling |
Position: | Named |
默认值: | Default |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-InputObject
指定要转换为 JSON 格式的对象。 输入包含对象的变量,或键入获取对象的命令或表达式。 还可以通过管道将对象传递给 ConvertTo-Json
。
InputObject 参数是必需的,但其值可以是 null($null
)或空字符串。
当输入对象 $null
时,ConvertTo-Json
返回 null
的 JSON 表示形式。 当输入对象为空字符串时,ConvertTo-Json
返回空字符串的 JSON 表示形式。
类型: | Object |
Position: | 0 |
默认值: | None |
必需: | True |
接受管道输入: | True |
接受通配符: | False |
输入
可以通过管道将任何对象传递给此 cmdlet。
输出
此 cmdlet 返回一个字符串,表示转换为 JSON 字符串的输入对象。
备注
ConvertTo-Json
cmdlet 是使用 Newtonsoft Json.NET实现的。