[Powershell入門] JSONオブジェクトを簡単に作成する方法まとめ

今回は、Powershellを利用してJSONオブジェクトを作成する方法をいくつかまとめた備忘録となります。

JSONはRest APIなどでよく利用されるデータであり、Web系開発では必須のデータ形式かと思います。

クラウド化が進むにつれて、AzureやAWSなどWindowsサーバからデータやり取りの自動化などが検討される自体となったことから、今回はPowershellでのJSONオブジェクトの作成について記載していきます。

JSONオブジェクト作成方法

直接JSONデータを記載する

最もシンプルな方法が、直接ハードコーディングする方法です。何かしらのメソッドを利用するのではなく、単にオブジェクトをそのままPowershellコードとして記載します。

$id = 123
$name = "Taro"

$json_str = @"
{
    "id": $($id),
    "name": $($name)
}
"@

Write-Host "<# Output result:"
Write-Host ($json_str)
Write-Host "#>"

<# Output result:  
{
    "id": 123,
    "name": Taro
}
#>

簡単なJSONオブジェクトであれば。このように直接記載してもそこまで非効率ではないですが、複雑なJSONオブジェクトを作成する際は、保守性が低下します。

ConvertTo-Jsonを利用したオブジェクト変換

Powershellではハッシュテーブルを使ったオブジェクト管理がよく利用されています。
作成したハッシュテーブルをConvertTo-Json Cmdletを利用し、JSON文字列に変換します。

$json_hash_table = @{
    id = 123
    name = "Taro"
    age = 23
    isActive = "false"
    Category = @{
        categoryId = 1
        name = "Men"
    }
    Tags = @(
        "Lucky", "Month"
    )
}

Write-Host "<# Output result:"
Write-Host ($json_hash_table | ConvertTo-Json )
Write-Host "#>"

<# Output result:
{
    "id":  123,
    "name":  "Taro",
    "age":  23,
    "Tags":  [
                 "Lucky",
                 "Month"
             ],
    "Category":  {
                     "categoryId":  1,
                     "name":  "Men"
                 },
    "isActive":  "false"
}
#>

配列や入れ子になっているオブジェクト情報についてはとても有効な手段だと思います。
ただし、Boolean型や日付の書式設定など細かく制御することができないので、注意が必要です。

Newtonsoft.Jsonを使ったJsonConvert

Newtonsoft.Jsonは.NETのJsonデータを処理するライブラリで.NETアプリケーション開発でよく利用します。.NET 6以降ではSystem.Text.Jsonを利用するケースが多いですが、それ以前の.NET アプリケーションではこのライブラリを利用するのが最善です。

Newtonsoft.Jsonを利用する場合は、アセンブリを読み込んで利用します。

$asm = [Reflection.Assembly]::LoadFile("C:\Program Files\WindowsPowerShell\Modules\newtonsoft.json\1.0.2.201\libs\newtonsoft.json.dll")

$json_hash_table = @{
    id = 123
    name = "Taro"
    age = 23
    isActive = "false"
    Category = @{
        categoryId = 1
        name = "Men"
    }
    Tags = @(
        "Lucky", "Month"
    )
}

$settings = [Newtonsoft.Json.JsonSerializerSettings]::new()
$settings.ContractResolver = [Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver]::new()
$jsonString = [Newtonsoft.Json.JsonConvert]::SerializeObject($json_hash_table, $settings)

Write-Host "<# Output result:"
Write-Host $jsonString
Write-Host "#>"

<# Output result:
{"id":123,"name":"Taro","age":23,"tags":["Lucky","Month"],"category":{"categoryId":1,"name":"Men"},"isActive":"false"}
#>

CamelCaseのフォーマッターを利用しています。

もし、利用できない場合は、下記CmdletでNewtonsoft.jsonをインストールした後に利用してください

Install-Module -Name newtonsoft.json -RequiredVersion 1.0.2.201

さいごに

Powershellは今後もインフラ構築などでかなり使われる言語ですので、Cmdlet含め理解しておくと良いかと思いまうs。

タイトルとURLをコピーしました