ConvertFrom-Json
JSON 形式の文字列をカスタム オブジェクトまたはハッシュ テーブルに変換します。
構文
ConvertFrom-Json
[-InputObject] <String>
[-AsHashtable]
[-DateKind <JsonDateKind>]
[-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 : Monday, January 29, 2024 3:10:26 PM
Date : 1/29/2024 12:00:00 AM
Day : 29
DayOfWeek : 1
DayOfYear : 29
Hour : 15
Kind : 2
Millisecond : 931
Microsecond : 47
Nanosecond : 600
Minute : 10
Month : 1
Second : 26
Ticks : 638421378269310476
TimeOfDay : @{Ticks=546269310476; Days=0; Hours=15; Milliseconds=931; Microseconds=47;
Nanoseconds=600; Minutes=10; Seconds=26; TotalDays=0.632256146384259;
TotalHours=15.1741475132222; TotalMilliseconds=54626931.0476;
TotalMicroseconds=54626931047.6; TotalNanoseconds=54626931047600;
TotalMinutes=910.448850793333; TotalSeconds=54626.9310476}
Year : 2024
この例では、 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 |
-DateKind
JSON 文字列の日時値を解析するときに使用するメソッドを指定します。 このパラメーターの有効値は、次のとおりです。
Default
Local
Utc
Offset
String
これらの値が変換にどのように影響するかについては、 NOTESの詳細を参照してください。
このパラメーターは、PowerShell 7.5 で導入されました。
型: | Microsoft.PowerShell.Commands.JsonDateKind |
指定可能な値: | Default, Local, Utc, Offset, String |
配置: | Named |
規定値: | Default |
必須: | 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 |
入力
JSON 文字列をパイプ処理して ConvertFrom-Json
できます。
出力
PSCustomObject
メモ
このコマンドレットは、 Newtonsoft Json.NETを使用して実装されます。
PowerShell 6 以降、 ConvertTo-Json
はタイムスタンプとして書式設定された文字列を DateTime 値に変換しようとします。
PowerShell 7.5 では、 DateKind パラメーターが追加されました。これにより、タイムスタンプ文字列の変換方法を制御できます。 パラメーターには、次の値を指定できます。
Default
- 次の規則に従って、タイムスタンプを[datetime]
インスタンスに変換します。- 入力文字列にタイム ゾーン情報がない場合、Json.NET シリアライザーは値を指定されていない時間値として変換します。
- タイム ゾーン情報が末尾の
Z
である場合、Json.NET シリアライザーはタイムスタンプを UTC 値に変換します。 - タイムスタンプに
+02:00
などの UTC オフセットが含まれている場合、オフセットは呼び出し元の構成されたタイム ゾーンに変換されます。 既定の出力書式設定では、元のタイム ゾーン オフセットは示されません。
Local
- タイムスタンプを local 時間の[datetime]
インスタンスに変換します。 タイムスタンプに UTC オフセットが含まれている場合、オフセットは呼び出し元の構成されたタイム ゾーンに変換されます。 既定の出力書式設定では、元のタイム ゾーン オフセットは示されません。Utc
- 値を UTC 時刻で[datetime]
インスタンスに変換します。Offset
- タイムスタンプを[DateTimeOffset]
インスタンスに変換し、元の文字列のタイムゾーン オフセットをそのインスタンスに保持します。 生文字列にタイムゾーン オフセットが含まれていない場合は、 DateTimeOffset 値がローカル タイムゾーンで指定されます。String
-[string]
インスタンスの値を保持します。 これにより、カスタム解析ロジックを生の文字列値に適用できます。
PSObject 型は、JSON 文字列に表示されるプロパティの順序を維持します。 PowerShell 7.3 以降では、 AsHashtable パラメーターによって OrderedHashtable が作成されます。 キーと値のペアは、JSON 文字列に表示される順序で追加されます。 OrderedHashtableはその順序を保持します。
関連リンク
PowerShell