共用方式為


ConvertFrom-Json

將 JSON 格式的字串轉換成自訂物件或哈希表。

語法

Default (預設值)

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

Description

ConvertFrom-Json Cmdlet 會將 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 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,其會自動將 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:單一元素陣列的來回行程

此命令顯示一個範例,其中 -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 開始,物件是 OrderedHashtable,並保留 JSON 中的鍵排序。 在舊版中,物件是 Hashtable

有幾個情境可以克服 ConvertFrom-Json cmdlet 的某些限制。

  • 如果沒有此參數,當 JSON 物件中的兩個或多個索引鍵不區分大小寫時,它們會被視為相同的索引鍵。 在此情況下,轉換的物件中只會包含不區分大小寫而相同的索引鍵中的最後一個。
  • 若沒有此開關,每當 JSON 包含鍵是空字串時,指令就會擲回錯誤。 PSCustomObject 不能有空字串的屬性名稱。 例如,這可能發生在 project.lock.json 檔案中。
  • 哈希表可以更快速地處理特定數據結構。

參數屬性

類型:SwitchParameter
預設值:False
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-Depth

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

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

參數屬性

類型:Int32
預設值:None
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-InputObject

指定要轉換成 JSON 物件的 JSON 字串。 輸入包含字串的變數,或輸入取得字串的命令或表達式。 您也可以將字串透過管道傳送至 ConvertFrom-Json

需要 InputObject 參數,但其值可以是空字串。 當輸入物件是空字串時,ConvertFrom-Json 不會產生任何輸出。 InputObject 的值不能是 $null

參數屬性

類型:String
預設值:None
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:0
必要:True
來自管線的值:True
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-NoEnumerate

指定輸出不會被列出。

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

參數屬性

類型:SwitchParameter
預設值:False
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

CommonParameters

此 Cmdlet 支援一般參數:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 如需詳細資訊,請參閱 about_CommonParameters

輸入

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 字串中顯示的順序新增。 OrderHashtable 會保留該順序。