ConvertFrom-Json
JSON 形式の文字列をカスタム オブジェクトまたはハッシュ テーブルに変換します。
構文
ConvertFrom-Json
[-InputObject] <String>
[-AsHashtable]
[-Depth <Int32>]
[-NoEnumerate]
[<CommonParameters>]
説明
このコマンドレットは ConvertFrom-Json 、JavaScript Object Notation (JSON) 形式の文字列を、JSON 文字列内の各フィールドのプロパティを持つカスタム PSCustomObject オブジェクトに変換します。 JSON は、オブジェクトのテキスト表現を提供する Web サイトで広く使用されています。 JSON 標準では、 PSCustomObject で禁止されている使用は禁止されていません。 たとえば、JSON 文字列に重複するキーが含まれている場合、このコマンドレットでは最後のキーのみが使用されます。 以下の他の例を参照してください。
任意のオブジェクトから JSON 文字列を生成するには、コマンドレットを ConvertTo-Json 使用します。
このコマンドレットは、PowerShell 3.0 で導入されました。
注意
PowerShell 6 以降、このコマンドレットはコメント付きの JSON をサポートしています。 受け入れられたコメントは、2 つのスラッシュ (//) で開始されます。 コメントはデータに表されず、PowerShell 5.1 と同様にデータを破損したりエラーをスローしたりすることなく、ファイルに書き込むことができます。
例
例 1: DateTime オブジェクトを JSON オブジェクトに変換する
このコマンドでは、コマンドレットとConvertFrom-JsonコマンドレットをConvertTo-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 JsonFile.JSON | ConvertFrom-Json
このコマンドGet-Contentコマンドレットを使用して、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 つの整数になります。
パラメーター
JSON をハッシュ テーブル オブジェクトに変換します。 このスイッチは PowerShell 6.0 で導入されました。 コマンドレットのいくつかの制限 ConvertFrom-Json を克服できるシナリオがいくつかあります。
- 大文字と小文字の区別のみが異なるキーを含むリストが JSON に含まれている場合。 スイッチがないと、これらのキーは同じキーと見なされるため、最後のキーのみが使用されます。
- JSON に空の文字列であるキーが含まれている場合。 スイッチがないと、コマンドレットはエラーをスローします。これは、
PSCustomObjecta では許可されませんが、ハッシュ テーブルはエラーをスローします。 これが発生する可能性があるユース ケースの例は、ファイルですproject.lock.json。 - ハッシュ テーブルは、特定のデータ構造に対して高速に処理できます。
| Type: | SwitchParameter |
| Position: | Named |
| Default value: | False |
| Accept pipeline input: | False |
| Accept wildcard characters: | False |
JSON 入力で許可される最大深度を取得または設定します。 既定では 1024 です。
このパラメーターは、PowerShell 6.2 で導入されました。
| Type: | Int32 |
| Position: | Named |
| Default value: | None |
| Accept pipeline input: | False |
| Accept wildcard characters: | False |
JSON オブジェクトに変換する JSON 文字列を指定します。 文字列が格納されている変数を入力するか、文字列を取得するコマンドまたは式を入力します。 文字列 ConvertFrom-Jsonをパイプすることもできます。
InputObject パラメーターは必須ですが、その値に空の文字列を指定できます。 入力オブジェクトが空の文字列の場合、 ConvertFrom-Json 出力は生成されません。 InputObject の値を指定$nullすることはできません。
| Type: | String |
| Position: | 0 |
| Default value: | None |
| Accept pipeline input: | True |
| Accept wildcard characters: | False |
出力が列挙されないことを指定します。
このパラメーターを設定すると、すべての要素を個別に送信する代わりに、配列が 1 つのオブジェクトとして送信されます。 これにより、JSON を使用して ConvertTo-Jsonラウンドトリップできることを保証します。
| Type: | SwitchParameter |
| Position: | Named |
| Default value: | 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 オフセットとして指定されます。 オフセットは、呼び出し元の構成済みのタイム ゾーンに適切に変換されます。 既定の出力書式では、元のタイム ゾーン オフセットは示されません。