HOWTO · PowerShell
PowerShell で JSON 配列を作成する方法
このチュートリアルでは、PowerShell で JSON 配列を作成する方法について説明します。
PowerShell では、JSON(JavaScript Object Notation)は、さまざまなシステムやアプリケーション間の通信に使用される一般的なデータインターチェンジフォーマットです。キーと値のペアを含む JSON 配列は、データを整理するための構造化された方法です。
この記事では、PowerShell で JSON 配列を作成するさまざまな方法を、詳細なコード例と説明とともに探ります。
PowerShell で ConvertTo-Json を使用して JSON 配列を作成する
この例では、PowerShell を使用してシンプルな JSON 配列を作成する方法を示します。まず、$Body という変数内に JSON 配列を整理し、次に ConvertTo-Json コマンドレットを使用して JSON 配列に変換します。
例 1:
$Body = @(
@{
FirstName ='Alen'
LastName ='Walker'
}
)
ConvertTo-Json -InputObject $Body
このコードスニペットでは、@() を使用して配列を定義し、配列内にデータ要素を表すキーと値のペアを持つハッシュテーブル(@{})を作成します。ハッシュテーブル内のキーは、FirstName や LastName など、JSON 内のフィールド名に対応します。
次に、ConvertTo-Json を使用して、この構造を JSON 配列に変換します。
結果として得られる JSON 出力は以下の通りです。
出力:
[
{
"LastName": "Walker",
"FirstName": "Alen"
}
]
次の例では、サブ配列を含む JSON オブジェクトを作成する方法を示します。
$Body 変数は、2つのプロパティを持つ JSON オブジェクトを保持するために定義されています:My Items と My details。各プロパティにはアイテムの配列が含まれています。
例 2:
$body = @{
'My Items' = @(
"Item 1",
"Item 2",
"Item 3",
"Item 4"
)
'My details' =@(
@{
"Name" = "Alen"
"Id" = "0001"
},
@{
"Name" = "Mycle"
"Id" = "0002"
}
)
}
ConvertTo-Json -InputObject $Body
このスクリプトでは、ハッシュテーブル(@{})を定義し、'My Items'と'My details'の 2つのキーを指定します。'My Items'に関連付けられた値はアイテム名の配列であり、'My details'に関連付けられた値は各アイテムの詳細を表すハッシュテーブルの配列です。
$Body 変数に対して ConvertTo-Json を実行すると、この構造が JSON オブジェクトに変換されます。
結果の JSON 出力は以下の通りです。
出力:
{
"My details": [
{
"Id": "0001",
"Name": "Alen"
},
{
"Id": "0002",
"Name": "Mycle"
}
],
"My Items": [
"Item 1",
"Item 2",
"Item 3",
"Item 4"
]
}
この JSON オブジェクトでは、"My details"と"My Items"がキーであり、それぞれのデータの配列に関連付けられています。この構造は、関連するデータを階層的な方法で整理するためのもので、PowerShell で JSON を扱う際の一般的な使用例です。
PowerShell オブジェクトを作成し、それを直接 JSON 配列に変換することもできます。以下の例を見てみましょう:
$jsonArray = @(
@{
FirstName = 'John'
LastName = 'Doe'
},
@{
FirstName = 'Jane'
LastName = 'Smith'
}
)
$jsonOutput = $jsonArray | ConvertTo-Json
Write-Output $jsonOutput
出力:
[
{
"LastName": "Doe",
"FirstName": "John"
},
{
"LastName": "Smith",
"FirstName": "Jane"
}
]
ここで、この例のスクリプトは、$jsonArray という名前の変数を PowerShell のハッシュテーブルの配列として定義することから始まります。各ハッシュテーブルは、名(FirstName)と姓(LastName)の属性を持つ人物を表します。
スクリプトは次に、この PowerShell のハッシュテーブルの配列を ConvertTo-Json コマンドレットを使用して JSON 配列に変換し、結果を $jsonOutput 変数に割り当てます。最後に、Write-Output を使用して、結果の JSON 配列を表示します。
要約すると、このスクリプトは、PowerShell ハッシュテーブルを使用して、それぞれの名と姓を持つ 2 人の個人の JSON 配列表現を作成し、その後、この JSON 配列をコンソールに出力します。
PowerShell で ConvertTo-Json を使用して JSON 配列を作成し、ファイルに保存する
この方法はやや複雑です。複数の変数を使用して JSON 配列を段階的に作成します。
この方法をよりよく理解するために、以下の例を見てください。
例:
$jsonBase = @{}
$array = @{}
$data = @{"Name" = "Mycle"; "Colour" = "Alen"; }
$array.Add("User", $data)
$jsonBase.Add("UserData", $array)
$jsonBase | ConvertTo-Json -Depth 10 | Out-File ".\sample.json"
スクリプトの冒頭で、空のハッシュテーブルとして $jsonBase が作成されます。これは、作成する JSON オブジェクトの基本構造として機能します。
次に、配列オブジェクトを表すために、別のハッシュテーブル $array が初期化されます。この $array 変数は、JSON 構造内の配列を構成するデータを保持します。
その後、ユーザーデータのサンプルが、ユーザーの名前や色などのキーと値のペアを含むハッシュテーブル $data を使用して定義されます。このデータは後で配列内にカプセル化されます。
次に、スクリプトは $data ハッシュテーブルを $array ハッシュテーブルに追加し、キーUser に関連付けます。これにより、配列内でユーザー固有のデータの表現が確立されます。
続いて、ユーザーデータを含む $array が、キーUserData を使用して $jsonBase ハッシュテーブルに追加されます。このステップは、ユーザーデータの配列をより大きな JSON 構造内にカプセル化します。
最後に、スクリプトは ConvertTo-Json を使用して $jsonBase ハッシュテーブルを JSON 形式に変換します。-Depth パラメータは、入れ子構造を変換するための再帰の深さを制御します。
最後に、Out-File コマンドレットが JSON データを現在のディレクトリに sample.json という名前のファイルに保存します。
実行後、ユーザーデータがキーUserData の下に含まれ、ユーザーの名前と色がキーUser の下の入れ子構造内に表示される sample.json という名前の JSON ファイルが生成されます。
出力(sample.json):
{
"UserData": {
"User": {
"Name": "Mycle",
"Colour": "Alen"
}
}
}
PowerShell で Here-Strings を使用して JSON 配列を作成する
PowerShell で here-strings を使用することは、望ましいレイアウトを維持しながら、整形式の JSON 配列を構築するための便利な技術です。@" ... "@で示される here-string は、PowerShell でテキストのブロックを定義することを可能にし、改行やインデントを含むフォーマットを保持します。
here-strings を使用して、文字列として直接 JSON 配列を作成することができます。
例:
$jsonArray = @"
[
{
"FirstName": "John",
"LastName": "Doe"
},
{
"FirstName": "Jane",
"LastName": "Smith"
}
]
"@
Write-Output $jsonArray
出力:
[
{
"FirstName": "John",
"LastName": "Doe"
},
{
"FirstName": "Jane",
"LastName": "Smith"
}
]
この例では、here-string(@" ... "@)を使用して、文字列として直接 JSON 配列を作成しています。
この here-string 内で、適切な構文を使用して JSON 配列を定義しました。
- 配列全体を囲むために角括弧
[...]を使用しました。 - 次に、各個別の JSON オブジェクトを囲むために波括弧
{...}を使用しました。
最後に、Write-Output を使用して JSON 配列を表示しました。
このアプローチは、望ましい構造と形式を持つ JSON 配列を構成するプロセスを効率化します。出力は、定義された構造に合致した整形式の JSON 配列を示しています。
カスタムオブジェクトの配列を作成して PowerShell で JSON 配列を作成する
JSON 配列を作成するために使用できる別の方法は、要素を表すカスタムオブジェクトの配列を作成し、それを JSON 配列に変換することです。カスタムオブジェクトは、データを定義し構造化することを可能にする [PSCustomObject] 型のインスタンスです。
[PSCustomObject] を使用すると、カスタムプロパティを持つオブジェクトを作成できます。これは、スクリプトや関数内で構造化データを作成し操作するための基本的な機能です。
カスタムプロパティは、ハッシュテーブルのような構文を使用して定義され、プロパティ名とそれに対応する値を指定します。次のように:
[PSCustomObject]@{
Property1 = 'Value1'
Property2 = 'Value2'
}
以下は例です:
$jsonArray = @(
[PSCustomObject]@{
FirstName = 'John'
LastName = 'Doe'
},
[PSCustomObject]@{
FirstName = 'Jane'
LastName = 'Smith'
}
)
$jsonOutput = $jsonArray | ConvertTo-Json
Write-Output $jsonOutput
出力:
[
{
"FirstName": "John",
"LastName": "Doe"
},
{
"FirstName": "Jane",
"LastName": "Smith"
}
]
提供された例では、カスタムオブジェクトを使用して定義された配列 $jsonArray が作成されます。プロパティ FirstName と LastName およびそれぞれの値があります。
次に、ConvertTo-Json コマンドレットを使用して、カスタムオブジェクトの配列($jsonArray)を JSON 配列形式に変換します。結果の JSON 配列($jsonOutput)は、各カスタムオブジェクトを要素として含み、定義されたプロパティと値が JSON 構文で表現されています。
最後に、JSON 配列が Write-Output を使用して表示されます。
結論
結論として、PowerShell は JSON 配列を作成するための複数の方法を提供しており、それぞれの特定のニーズや好みに応じています。
ConvertTo-Json コマンドレットは、PowerShell オブジェクトや配列を JSON 表現に簡単に変換することを可能にする多用途のツールです。JSON を直接構造化する場合や here-strings を使用する場合、またはカスタムオブジェクトを活用する場合でも、PowerShell はさまざまなアプリケーションやシステム間での効率的なデータインターチェンジおよび整理のための JSON 配列の生成に柔軟性を提供します。