PowerShellを使用してJSONデータをGridView表示する

このプログラムは、PowerShellを使用してWindows Forms アプリケーションを作成し、JSONデータを解析してGUI上でGridView表示する方法です。

おすすめ記事

2024/2/12

PowerShellでJSONデータをGUIで表示する

PowerShellを使用してWindows Formsアプリケーションを作成する方法を紹介します。具体的には、JSONデータを読み込んで、その内容を表形式でGUI表示するプログラムです。 基本設定 まず、必要な.NET Frameworkのアセンブリを読み込みます。これにはSystem.Windows.FormsとSystem.Drawingが含まれます。これらはGUIコンポーネントとグラフィックス描画に必要です。 JSONデータの準備 この例では、カテゴリーとアイテムが定義された入れ子JSONデータを ...

System.Windows.Forms と System.Drawing の読み込み

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

この部分では、GUIアプリケーションを作成するために必要なSystem.Windows.FormsSystem.Drawingアセンブリを読み込んでいます。これにより、フォーム、コントロール、およびグラフィックスに関するクラスにアクセスできるようになります。

JSONデータの準備と解析

# JSONデータ文字列
$jsonData = @"
{
  "Category": {
    "Category1": [
      {
        "Key1": "Item1"
      },
      {
        "Key2": "Item2"
      },
      {
        "Key3": "Item3"
      }
    ],
    "Category2": [
      {
        "Key1": "Item4"
      },
      {
        "Key2": "Item5"
      },
      {
        "Key3": "Item6"
      }
    ]
  }
}
"@ | ConvertFrom-Json

ここでは、ヒアドキュメント構文を使用してJSON形式の文字列を定義し、ConvertFrom-Jsonコマンドレットを使ってPowerShellのオブジェクトに変換しています。このオブジェクトは後でデータを表示するために利用されます。

フォームの基本設定

$form = New-Object System.Windows.Forms.Form
$form.Text = 'Category Details'
$form.StartPosition = 'CenterScreen'
$form.Size = New-Object System.Drawing.Size(400, 300)

この部分で、新しいフォームオブジェクトを作成し、タイトル、開始位置、サイズなどの基本的なプロパティを設定しています。

DataGridViewの設定

# DataGridViewの設定
$dataGridView = New-Object System.Windows.Forms.DataGridView
$dataGridView.Dock = 'Fill'
$dataGridView.AllowUserToAddRows = $false
$dataGridView.AutoSizeColumnsMode = 'Fill'

# DataGridViewの列設定
$dataGridView.Columns.Add('Category', 'Category')
$dataGridView.Columns.Add('Key', 'Key')
$dataGridView.Columns.Add('Item', 'Item')

DataGridViewコントロールを作成し、それをフォームにドッキングしています。また、カテゴリ、キー、アイテムの各列を追加しています。DataGridViewは表形式のデータを表示するために使用されます。

カテゴリー行のスタイル設定

# カテゴリー行のスタイル設定
$categoryCellStyle = New-Object System.Windows.Forms.DataGridViewCellStyle
$categoryCellStyle.BackColor = 'Green'
$categoryCellStyle.ForeColor = 'White'
$categoryCellStyle.Font = New-Object System.Drawing.Font($dataGridView.Font.FontFamily, $dataGridView.Font.Size, [System.Drawing.FontStyle]::Bold)

カテゴリーヘッダー用のスタイルを定義しています。ここでは背景色、前景色、フォントスタイルをカスタマイズしています。

JSONデータからDataGridViewにデータを追加

# JSONデータからDataGridViewにデータを追加
foreach ($categoryName in $jsonData.Category.PSObject.Properties.Name) {
    $categoryItems = $jsonData.Category.$categoryName

    # カテゴリーヘッダー行を追加
    $index = $dataGridView.Rows.Add($categoryName, '', '')
    $dataGridView.Rows[$index].DefaultCellStyle = $categoryCellStyle
    $dataGridView.Rows[$index].Cells[1].Style.BackColor = $dataGridView.BackgroundColor
    $dataGridView.Rows[$index].Cells[2].Style.BackColor = $dataGridView.BackgroundColor

    # 各アイテムを追加
    foreach ($item in $categoryItems) {
        foreach ($key in $item.PSObject.Properties) {
            $dataGridView.Rows.Add('', $key.Name, $key.Value)
        }
    }
}

このループでは、まずJSONデータからカテゴリ名を取り出し、それぞれのカテゴリに対してヘッダー行をDataGridViewに追加しています。次に、各カテゴリ内のアイテムに対して、そのキーと値をDataGridViewに追加しています。

フォームの表示

$form.Controls.Add($dataGridView)
$form.ShowDialog()

最後に、DataGridViewをフォームのコントロールとして追加し、ShowDialogメソッドを使ってフォームを表示しています。

このプログラムは、PowerShellとWindows Formsを使用して、JSONデータを視覚的に表示する基本的な方法を示しています。カスタマイズ可能なUIを通じてデータを操作する必要があるスクリプトやアプリケーションに有用です。

最後に全文を掲載します。

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

# JSONデータ文字列
$jsonData = @"
{
  "Category": {
    "Category1": [
      {
        "Key1": "Item1"
      },
      {
        "Key2": "Item2"
      },
      {
        "Key3": "Item3"
      }
    ],
    "Category2": [
      {
        "Key1": "Item4"
      },
      {
        "Key2": "Item5"
      },
      {
        "Key3": "Item6"
      }
    ]
  }
}
"@ | ConvertFrom-Json

# フォームの基本設定
$form = New-Object System.Windows.Forms.Form
$form.Text = 'Category Details'
$form.StartPosition = 'CenterScreen'
$form.Size = New-Object System.Drawing.Size(400, 300)

# DataGridViewの設定
$dataGridView = New-Object System.Windows.Forms.DataGridView
$dataGridView.Dock = 'Fill'
$dataGridView.AllowUserToAddRows = $false
$dataGridView.AutoSizeColumnsMode = 'Fill'

# DataGridViewの列設定
$dataGridView.Columns.Add('Category', 'Category')
$dataGridView.Columns.Add('Key', 'Key')
$dataGridView.Columns.Add('Item', 'Item')

# カテゴリー行のスタイル設定
$categoryCellStyle = New-Object System.Windows.Forms.DataGridViewCellStyle
$categoryCellStyle.BackColor = 'Green'
$categoryCellStyle.ForeColor = 'White'
$categoryCellStyle.Font = New-Object System.Drawing.Font($dataGridView.Font.FontFamily, $dataGridView.Font.Size, [System.Drawing.FontStyle]::Bold)

# JSONデータからDataGridViewにデータを追加
foreach ($categoryName in $jsonData.Category.PSObject.Properties.Name) {
    $categoryItems = $jsonData.Category.$categoryName

    # カテゴリーヘッダー行を追加
    $index = $dataGridView.Rows.Add($categoryName, '', '')
    $dataGridView.Rows[$index].DefaultCellStyle = $categoryCellStyle
    $dataGridView.Rows[$index].Cells[1].Style.BackColor = $dataGridView.BackgroundColor
    $dataGridView.Rows[$index].Cells[2].Style.BackColor = $dataGridView.BackgroundColor

    # 各アイテムを追加
    foreach ($item in $categoryItems) {
        foreach ($key in $item.PSObject.Properties) {
            $dataGridView.Rows.Add('', $key.Name, $key.Value)
        }
    }
}

$form.Controls.Add($dataGridView)
$form.ShowDialog()

スポンサーリンク

-IT関連
-