ConvertFrom-Json
JSON 形式の文字列をカスタム オブジェクトまたはハッシュ テーブルに変換します。
構文
ConvertFrom-Json
[-InputObject] <String>
[-AsHashtable]
[-Depth <Int32>]
[-NoEnumerate]
[<CommonParameters>]
説明
このコマンドレットは ConvertFrom-Json
、JavaScript Object Notation (JSON) 形式の文字列を、JSON 文字列内の各フィールドのプロパティを持つカスタム PSObject または Hashtable オブジェクトに変換します。
JSON は、オブジェクトのテキスト表現を提供する Web サイトで広く使用されています。 コマンドレットは、JSON 文字列の各行を処理する新しいオブジェクトにプロパティを追加します。
JSON 標準では、 PSObject 型と Hashtable 型では禁止されている重複するキー名を使用できます。 たとえば、JSON 文字列に重複するキーが含まれている場合、このコマンドレットでは最後のキーのみが使用されます。 以下の他の例を参照してください。
任意のオブジェクトから JSON 文字列を生成するには、 コマンドレットを ConvertTo-Json
使用します。
このコマンドレットは、PowerShell 3.0 で導入されました。
注意
PowerShell 6 以降、コマンドレットはコメント付きの JSON をサポートしています。 JSON コメントは、2 つのスラッシュ (//
) 文字で始まります。 JSON コメントは、 コマンドレットによって出力されるオブジェクトにはキャプチャされません。 PowerShell 6 より前では、 ConvertFrom-Json
JSON コメントが見つかったときにエラーが返されます。
例
例 1: DateTime オブジェクトを JSON オブジェクトに変換する
このコマンドでは、 ConvertTo-Json
コマンドレットと ConvertFrom-Json
コマンドレットを使用して 、DateTime オブジェクトを Get-Date
コマンドレットから 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
使用して DateTime オブジェクトのすべてのプロパティを取得します。 コマンドレットを ConvertTo-Json
使用して DateTime オブジェクトを JSON オブジェクトとして書式設定された文字列に変換し、JSON 形式の ConvertFrom-Json
文字列を PSCustomObject オブジェクトに変換するコマンドレットを使用します。
例 2: Web サービスから JSON 文字列を取得し、PowerShell オブジェクトに変換する
このコマンドでは、 コマンドレットを Invoke-WebRequest
使用して Web サービスから JSON 文字列を取得し、 コマンドレットを ConvertFrom-Json
使用して 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
JSON コンテンツをオブジェクトに Invoke-RestMethod
自動的に変換する コマンドレットを使用することもできます。
例 3: JSON 文字列をカスタム オブジェクトに変換する
この例では、 コマンドレットを ConvertFrom-Json
使用して JSON ファイルを PowerShell カスタム オブジェクトに変換する方法を示します。
Get-Content -Raw JsonFile.JSON | ConvertFrom-Json
コマンドは、Get-Content コマンドレットを使用して JSON ファイル内の文字列を取得します。 Raw パラメーターは、ファイル全体を 1 つの JSON オブジェクトとして返します。 次に、パイプライン演算子を使用して、区切られた文字列を ConvertFrom-Json
コマンドレットに送信し、カスタム オブジェクトに変換します。
例 4: JSON 文字列をハッシュ テーブルに変換する
このコマンドは、スイッチがコマンドの制限を -AsHashtable
克服できる例を示しています。
'{ "key":"value1", "Key":"value2" }' | ConvertFrom-Json -AsHashtable
JSON 文字列には、大文字と小文字のみが異なるキーを持つ 2 つのキー値ペアが含まれています。 スイッチがないと、コマンドによってエラーがスローされます。
例 5: 1 つの要素配列をラウンドトリップする
このコマンドは、スイッチを -NoEnumerate
使用して 1 つの要素 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 文字列には、1 つの要素を含む配列が含まれています。 スイッチを使用しない場合、JSON を PSObject に変換し、 コマンドを使用 ConvertTo-Json
して戻すと、1 つの整数になります。
パラメーター
-AsHashtable
JSON をハッシュ テーブル オブジェクトに変換します。 このスイッチは PowerShell 6.0 で導入されました。 PowerShell 7.3 以降、オブジェクトは OrderedHashtable であり、JSON からのキーの順序を保持します。 以前のバージョンでは、オブジェクトは Hashtable です。
コマンドレットのいくつかの制限 ConvertFrom-Json
を克服できるシナリオがいくつかあります。
- このスイッチがないと、JSON オブジェクト内の 2 つ以上のキーが大文字と小文字が区別されずに同一である場合、それらは同じキーとして扱われます。 その場合、変換されたオブジェクトには、大文字と小文字を区別せずに同一のキーの最後だけが含まれます。
- このスイッチがない場合、JSON に空の文字列であるキーが含まれている場合は常にエラーがスローされます。 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
出力が列挙されていないことを指定します。
このパラメーターを設定すると、すべての要素を個別に送信する代わりに、配列が 1 つのオブジェクトとして送信されます。 これにより、 を介して ConvertTo-Json
JSON をラウンドトリップできることを保証します。
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
入力
JSON 文字列を に ConvertFrom-Json
パイプできます。
出力
PSCustomObject
メモ
このコマンドレットは、 Newtonsoft Json.NET を使用して実装されます。
PowerShell 6 以降では、 ConvertTo-Json
タイムスタンプとして書式設定された文字列を DateTime 値に変換しようとします。 変換後の値は、 [datetime]
次のようにプロパティが設定された Kind
インスタンスです。
Unspecified
入力文字列にタイム ゾーン情報がない場合は 。Utc
タイム ゾーン情報が末尾Z
の である場合は 。Local
タイム ゾーン情報が のような+02:00
末尾の UTC オフセットとして指定されている場合は 。 オフセットは、呼び出し元の構成済みのタイム ゾーンに適切に変換されます。 既定の出力書式では、元のタイム ゾーン オフセットは示されません。
PSObject 型は、JSON 文字列に表示されるプロパティの順序を維持します。 PowerShell 7.3 以降では、 AsHashtable パラメーターによって OrderedHashtable が作成されます。 キーと値のペアは、JSON 文字列に表示される順序で追加されます。 OrderedHashtable では、その順序が保持されます。