---
title: PowerShellを使用してJSONデータをGridView表示する
url: 'https://automationse.net/powershell-windows-forms-json-guide'
markdown: 'https://automationse.net/powershell-windows-forms-json-guide.md'
date: '2024-02-11'
description: 'このプログラムは、PowerShellを使用してWindows Forms アプリケーションを作成し、JSONデータを解析してGUI上でGridView表示する方法です。 おすすめ記事 [st-postgroup html_class="undefined" id="878" rank="0" type="card" slide="off" slides_to_show="3,3,2" slide_date="on" slide_more="ReadMore" slide_cente…'
taxonomy:
  category:
    - IT関連
  tag:
    - PowerShell
---

## [PowerShellを使用してJSONデータをGridView表示する](https://automationse.net/powershell-windows-forms-json-guide)

  公開日 2024.02.11 更新日 2024.02.11  [PowerShell](https://automationse.net/tag:PowerShell#body-wrapper)  

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

おすすめ記事

[st-postgroup html_class="undefined" id="878" rank="0" type="card" slide="off" slides_to_show="3,3,2" slide_date="on" slide_more="ReadMore" slide_center="off" fullsize_type=""] 

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

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

この部分では、GUIアプリケーションを作成するために必要な`System.Windows.Forms`と`System.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()
```

 [ Previous Post](https://automationse.net/creating-dynamic-guis-with-powershell) [Next Post ](https://automationse.net/search-and-zip-files-using-regular-expressions)

---

## Navigation

- Parent: [WordPress Import](https://automationse.net/wordpress-import.md)
- Previous: [ファイルを正規表現で検索し、圧縮する](https://automationse.net/search-and-zip-files-using-regular-expressions.md)
- Next: [PowerShellでJSONデータをGUIで表示する](https://automationse.net/creating-dynamic-guis-with-powershell.md)
