次の方法で共有


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-JsonJSON をラウンドトリップできることを保証します。

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

入力

String

JSON 文字列を に ConvertFrom-Jsonパイプできます。

出力

PSCustomObject

OrderedHashtable

メモ

このコマンドレットは、 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 では、その順序が保持されます。