ConvertFrom-Json

將 JSON 格式字串轉換成自訂物件或雜湊表。

Syntax

ConvertFrom-Json
                [-InputObject] <String>
                [-AsHashtable]
                [-Depth <Int32>]
                [-NoEnumerate]
                [<CommonParameters>]

Description

Cmdlet 會將 ConvertFrom-Json JavaScript 物件標記法 (JSON) 格式化字串轉換成自訂 PSObjectHashtable 物件,該物件具有 JSON 字串中每個欄位的屬性。 JSON 一般由網站用於提供物件的文字表示方式。 Cmdlet 會在處理 JSON 字串的每一行時,將屬性新增至新的 物件。

JSON 標準允許 在 PSObject 結束 雜湊表 類型中禁止重複的索引鍵名稱。 例如,如果 JSON 字串包含重複的索引鍵,則此 Cmdlet 只會使用最後一個索引鍵。 請參閱下列其他範例。

若要從任何物件產生 JSON 字串,請使用 ConvertTo-Json Cmdlet。

此 Cmdlet 是在 PowerShell 3.0 中引進。

注意

從 PowerShell 6 開始,Cmdlet 支援具有批註的 JSON。 JSON 批註開頭為兩個正斜線 (//) 字元。 Cmdlet 不會在物件輸出中擷取 JSON 批註。 在 PowerShell 6 之前, ConvertFrom-Json 會在遇到 JSON 批註時傳回錯誤。

範例

範例 1:將 DateTime 物件轉換為 JSON 物件

此命令會使用 ConvertTo-JsonConvertFrom-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 以及將 JSON 格式字串轉換成 PSCustomObject 物件的 Cmdlet。

範例 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,以將它轉換成自訂物件。

範例 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 中引進。 從 PowerShell 7.3 開始,物件是 OrderedHashtable ,並保留 JSON 中索引鍵的順序。 在舊版中,物件是 Hashtable

有數個案例可以克服 Cmdlet 的某些 ConvertFrom-Json 限制。

  • 如果沒有此參數,當 JSON 物件中的兩個或多個索引鍵不區分大小寫時,它們會被視為相同的索引鍵。 在此情況下,轉換的物件中只會包含那些不區分大小寫的相同索引鍵的最後一個。
  • 如果沒有此參數,每當 JSON 包含空字串的索引鍵時,Cmdlet 就會擲回錯誤。 PSCustomObject 不能有空字串的屬性名稱。 例如,這可能會發生在檔案中 project.lock.json
  • 雜湊表可以更快速地處理特定資料結構。
Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False

-Depth

取得或設定 JSON 輸入允許擁有的最大深度。 預設值為 1024。

此參數是在 PowerShell 6.2 中引進的。

Type:Int32
Position:Named
Default value:None
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
Accept pipeline input:True
Accept wildcard characters:False

-NoEnumerate

指定未列舉輸出。

設定此參數會導致陣列以單一物件的形式傳送,而不是個別傳送每個元素。 這可確保可以透過 ConvertTo-Json 來舍入 JSON。

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False

輸入

String

您可以使用管線將 JSON 字串傳送至 ConvertFrom-Json

輸出

PSCustomObject

OrderedHashtable

備註

此 Cmdlet 是使用 Newtonsoft Json.NET來實作。

從 PowerShell 6 開始, ConvertTo-Json 嘗試將格式化為時間戳記的字串轉換為 DateTime 值。 轉換的值是 [datetime] 具有 Kind 屬性集的實例,如下所示:

  • Unspecified如果輸入字串中沒有時區資訊,則為 。
  • Utc如果時區資訊為尾端 Z ,則為 。
  • Local如果時區資訊是以尾端 UTC 位移 的形式提供,則為 ,例如 +02:00 。 位移會正確轉換為呼叫端設定的時區。 預設輸出格式設定不會指出原始時區位移。

PSObject類型會維護 JSON 字串中所呈現的屬性順序。 從 PowerShell 7.3 開始, AsHashtable 參數會建立 OrderedHashtable。 索引鍵/值組會依 JSON 字串中顯示的順序新增。 OrderedHashtable會保留該順序。