ConvertFrom-Json
將 JSON 格式的字串轉換為自訂物件或哈希表。
Syntax
ConvertFrom-Json
[-InputObject] <String>
[-AsHashtable]
[-Depth <Int32>]
[-NoEnumerate]
[<CommonParameters>]
Description
Cmdlet 會將 ConvertFrom-Json
JavaScript 物件表示法 (JSON) 格式化字串轉換成自定義 PSCustomObject 物件,該物件具有 JSON 字串中每個字段的屬性。 JSON 一般由網站用於提供物件的文字表示方式。 JSON 標準不會禁止 使用 PSCustomObject 的用法。 例如,如果 JSON 字串包含重複的索引鍵,則此 Cmdlet 只會使用最後一個索引鍵。 請參閱下列其他範例。
若要從任何對象產生 JSON 字串,請使用 ConvertTo-Json
Cmdlet。
此 Cmdlet 是在 PowerShell 3.0 中引進。
注意
從 PowerShell 6 開始,此 Cmdlet 支援具有批注的 JSON。 接受的批注會以兩個正斜線開頭, () //
。 批注不會在數據中表示,而且可以在檔案中寫入,而不會損毀數據或擲回錯誤,如同在 PowerShell 5.1 中所做的一樣。
範例
範例 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,此 Cmdlet 會自動將 JSON 內容轉換成 物件。
範例 3:將 JSON 字串轉換為自定義物件
此範例示範如何使用 ConvertFrom-Json
Cmdlet 將 JSON 檔案轉換成 PowerShell 自定義物件。
Get-Content JsonFile.JSON | ConvertFrom-Json
命令會使用 Get-Content Cmdlet 來取得 JSON 檔案中的字串。 然後,它會使用管線運算符將分隔字串傳送至 ConvertFrom-Json
Cmdlet,以將它轉換成自定義物件。
範例 4:將 JSON 字串轉換為哈希表
此命令顯示參數可以克服命令限制的範例 -AsHashtable
。
'{ "key":"value1", "Key":"value2" }' | ConvertFrom-Json -AsHashtable
JSON 字串包含兩個索引鍵值組,其索引鍵只與大小寫不同。 如果沒有 參數,命令就會擲回錯誤。
範例 5:往返單一元素陣列
此命令顯示參數用來往返單一元素 JSON 陣列的範例 -NoEnumerate
。
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 中引進。 有幾個案例可以克服 Cmdlet 的 ConvertFrom-Json
一些限制。
- 如果 JSON 包含索引鍵只與大小寫不同的清單。 如果沒有參數,這些索引鍵會視為相同的索引鍵,因此只會使用最後一個密鑰。
- 如果 JSON 包含空字串的索引鍵。 如果沒有參數,Cmdlet 會擲回錯誤,因為
PSCustomObject
不允許該錯誤,但哈希表會擲回錯誤。 其中可能會發生的範例使用案例是project.lock.json
檔案。 - 哈希表可以更快速地處理特定數據結構。
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Depth
取得或設定 JSON 輸入允許擁有的最大深度。 根據預設,它是 1024。
此參數是在 PowerShell 6.2 中引進的。
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
指定 JSON 字串以轉換成 JSON 物件。 輸入包含字串的變數,或輸入可取得字串的命令或運算式。 您也可以使用管線將字串傳送至 ConvertFrom-Json
。
InputObject 是必要參數,但其值可以是空字串。 當輸入物件是空字串時, ConvertFrom-Json
不會產生任何輸出。 InputObject 值不能是 $null
。
Type: | String |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-NoEnumerate
指定未列舉輸出。
設定此參數會使陣列以單一物件的形式傳送,而不是個別傳送每個元素。 這可確保 JSON 可以透過 ConvertTo-Json
四捨五入。
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
輸入
您可以使用管線將 JSON 字串傳送至 ConvertFrom-Json
。
輸出
PSCustomObject
備註
此 Cmdlet 是使用 Newtonsoft Json.NET 來實作。
從 PowerShell 6 開始, ConvertTo-Json
嘗試將格式化為時間戳的字串轉換為 DateTime 值。 轉換的值是 [datetime]
具有屬性集的 Kind
實例,如下所示:
Unspecified
如果輸入字串中沒有時區資訊, 則為 。Utc
如果時區資訊為尾Z
端,則為 。Local
,如果時區資訊是以尾端 UTC 位移 的形式提供,例如+02:00
。 位移已正確轉換成呼叫端設定的時區。 默認輸出格式設定不會指出原始時區位移。