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

このコードスニペットでは、@() を使用して配列を定義し、配列内にデータ要素を表すキーと値のペアを持つハッシュテーブル(@{})を作成します。ハッシュテーブル内のキーは、FirstNameLastName など、JSON 内のフィールド名に対応します。

次に、ConvertTo-Json を使用して、この構造を JSON 配列に変換します。

結果として得られる JSON 出力は以下の通りです。

出力:

[
    {
        "LastName":  "Walker",
        "FirstName":  "Alen"
    }
]

次の例では、サブ配列を含む JSON オブジェクトを作成する方法を示します。

$Body 変数は、2つのプロパティを持つ JSON オブジェクトを保持するために定義されています:My ItemsMy 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 が作成されます。プロパティ FirstNameLastName およびそれぞれの値があります。

次に、ConvertTo-Json コマンドレットを使用して、カスタムオブジェクトの配列($jsonArray)を JSON 配列形式に変換します。結果の JSON 配列($jsonOutput)は、各カスタムオブジェクトを要素として含み、定義されたプロパティと値が JSON 構文で表現されています。

最後に、JSON 配列が Write-Output を使用して表示されます。

結論

結論として、PowerShell は JSON 配列を作成するための複数の方法を提供しており、それぞれの特定のニーズや好みに応じています。

ConvertTo-Json コマンドレットは、PowerShell オブジェクトや配列を JSON 表現に簡単に変換することを可能にする多用途のツールです。JSON を直接構造化する場合や here-strings を使用する場合、またはカスタムオブジェクトを活用する場合でも、PowerShell はさまざまなアプリケーションやシステム間での効率的なデータインターチェンジおよび整理のための JSON 配列の生成に柔軟性を提供します。