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 で導入されました。

Note

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 オブジェクトとして書式設定された文字列に変換し、ConvertFrom-Json コマンドレットを使用して 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 ファイルで発生する可能性があります。
  • ハッシュ テーブルは、特定のデータ構造に対して高速に処理できます。
型:SwitchParameter
配置:Named
規定値:False
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Depth

JSON 入力で許可される最大深度を取得または設定します。 既定値は 1024 です。

このパラメーターは、PowerShell 6.2 で導入されました。

型:Int32
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-InputObject

JSON オブジェクトに変換する JSON 文字列を指定します。 文字列が格納されている変数を入力するか、文字列を取得するコマンドまたは式を入力します。 文字列をパイプ処理して ConvertFrom-Jsonすることもできます。

InputObject パラメーターは必須ですが、その値には空の文字列を指定できます。 入力オブジェクトが空の文字列の場合、 ConvertFrom-Json は出力を生成しません。 InputObject値を$nullすることはできません。

型:String
配置:0
規定値:None
必須:True
パイプライン入力を受け取る:True
ワイルドカード文字を受け取る:False

-NoEnumerate

出力が列挙されていないことを指定します。

このパラメーターを設定すると、すべての要素を個別に送信する代わりに、配列が 1 つのオブジェクトとして送信されます。 これにより、JSON を ConvertTo-Json経由でラウンドトリップできることを保証します。

型:SwitchParameter
配置:Named
規定値:False
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

入力

String

JSON 文字列をパイプ処理して ConvertFrom-Jsonできます。

出力

PSCustomObject

OrderedHashtable

メモ

このコマンドレットは、 Newtonsoft Json.NETを使用して実装されます。

PowerShell 6 以降、 ConvertTo-Json はタイムスタンプとして書式設定された文字列を DateTime 値に変換しようとします。 変換後の値は、Kind プロパティが次のように設定された[datetime] インスタンスです。

  • Unspecified(入力文字列にタイム ゾーン情報がない場合)。
  • Utcタイム ゾーン情報が末尾の Zの場合。
  • Local(タイム ゾーン情報が末尾の UTC offset として指定されている場合+02:00など)。 オフセットは、呼び出し元の構成されたタイム ゾーンに適切に変換されます。 既定の出力書式設定では、元のタイム ゾーン オフセットは示されません。

PSObject 型は、JSON 文字列に表示されるプロパティの順序を維持します。 PowerShell 7.3 以降では、 AsHashtable パラメーターによって OrderedHashtable が作成されます。 キーと値のペアは、JSON 文字列に表示される順序で追加されます。 OrderedHashtableはその順序を保持します。