ConvertTo-Json 
	将对象转换为 JSON 格式的字符串。
语法
Default (默认值)
ConvertTo-Json
    [-InputObject] <Object>
    [-Depth <Int32>]
    [-Compress]
    [-EnumsAsStrings]
    [-AsArray]
    [-EscapeHandling <StringEscapeHandling>]
    [<CommonParameters>]
说明
              ConvertTo-Json cmdlet 将任何 .NET 对象转换为 JavaScript 对象表示法 (JSON) 格式的字符串。 这些属性将转换为字段名称,字段值将转换为属性值,并删除方法。
然后,可以使用 ConvertFrom-Json cmdlet 将 JSON 格式的字符串转换为可在 PowerShell 中轻松管理的 JSON 对象。
许多网站使用 JSON 而不是 XML 来序列化数据,以便在服务器和基于 Web 的应用之间进行通信。
从 PowerShell 7.1 起,如果输入对象的深度超出命令指定的深度,ConvertTo-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
{
  "value": "2018-10-12T23:07:18.8450248-05:00",
  "DisplayHint": 2,
  "DateTime": "October 12, 2018 11:07:18 PM"
}
[
  {
    "value": "2018-10-12T23:07:18.8480668-05:00",
    "DisplayHint": 2,
    "DateTime": "October 12, 2018 11:07:18 PM"
  }
]
此示例演示 ConvertTo-Json cmdlet 的输出,以及不使用 AsArray switch 参数。 可以看到输出的第二部分包装在数组括号中。
示例 3
@{Account="User01";Domain="Domain01";Admin="True"} | ConvertTo-Json -Compress
{"Domain":"Domain01","Account":"User01","Admin":"True"}
此命令显示使用 的 ConvertTo-Json 参数的效果。 压缩仅影响字符串的外观,而不会影响其有效性。
示例 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 来获取 * 对象的所有属性()。 输出显示 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 | 
| 默认值: | None | 
| 支持通配符: | False | 
| 不显示: | False | 
参数集
(All)
| Position: | Named | 
| 必需: | False | 
| 来自管道的值: | False | 
| 来自管道的值(按属性名称): | False | 
| 来自剩余参数的值: | False | 
-Compress
省略输出字符串中的空格和缩进格式。
参数属性
| 类型: | SwitchParameter | 
| 默认值: | None | 
| 支持通配符: | False | 
| 不显示: | False | 
参数集
(All)
| Position: | Named | 
| 必需: | False | 
| 来自管道的值: | False | 
| 来自管道的值(按属性名称): | False | 
| 来自剩余参数的值: | False | 
-Depth
指定 JSON 表示形式中包含多少个包含对象的级别。 该值可以是从 1 到 100的任何数字。 默认值是 2。 如果输入对象中的级别数超过此数字,ConvertTo-Json 发出警告。
参数属性
| 类型: | Int32 | 
| 默认值: | 2 | 
| 支持通配符: | False | 
| 不显示: | False | 
参数集
(All)
| Position: | Named | 
| 必需: | False | 
| 来自管道的值: | False | 
| 来自管道的值(按属性名称): | False | 
| 来自剩余参数的值: | False | 
-EnumsAsStrings 
		提供将所有枚举转换为其字符串表示形式的替代序列化选项。
参数属性
| 类型: | SwitchParameter | 
| 默认值: | None | 
| 支持通配符: | False | 
| 不显示: | False | 
参数集
(All)
| Position: | Named | 
| 必需: | False | 
| 来自管道的值: | False | 
| 来自管道的值(按属性名称): | False | 
| 来自剩余参数的值: | False | 
-EscapeHandling 
		控制在生成的 JSON 输出中转义某些字符的方式。 默认情况下,仅转义控件字符(如换行符)。
可接受的值为:
- 默认值 - 仅转义控制字符。
- EscapeNonAscii - 将转义所有非 ASCII 和控制字符。
- EscapeHtml - HTML(<、>、&、'、")和控件字符被转义。
此参数是在 PowerShell 6.2 中引入的。
参数属性
| 类型: | Newtonsoft.Json.StringEscapeHandling | 
| 默认值: | Default | 
| 支持通配符: | False | 
| 不显示: | False | 
参数集
(All)
| Position: | Named | 
| 必需: | False | 
| 来自管道的值: | False | 
| 来自管道的值(按属性名称): | False | 
| 来自剩余参数的值: | False | 
-InputObject 
		指定要转换为 JSON 格式的对象。 输入包含对象的变量,或键入获取对象的命令或表达式。 还可以通过管道将对象传递给 ConvertTo-Json。
              InputObject 参数是必需的,但其值可以是 null($null)或空字符串。
当输入对象 $null时,ConvertTo-Json 返回 null的 JSON 表示形式。 当输入对象为空字符串时,ConvertTo-Json 返回空字符串的 JSON 表示形式。
参数属性
| 类型: | Object | 
| 默认值: | None | 
| 支持通配符: | False | 
| 不显示: | False | 
参数集
(All)
| Position: | 0 | 
| 必需: | True | 
| 来自管道的值: | True | 
| 来自管道的值(按属性名称): | False | 
| 来自剩余参数的值: | False | 
CommonParameters
此 cmdlet 支持通用参数:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 有关详细信息,请参阅 about_CommonParameters。
输入
Object
可以通过管道将任何对象传递给 ConvertTo-Json。
输出
String
备注
              ConvertTo-Json cmdlet 是使用 Newtonsoft Json.NET实现的。