PowerShell から JSON への変換ツール
PowerShell のハッシュテーブルか PSCustomObject を貼り付けてください。JSON が返ってきます。
このツールでできること
PowerShell スクリプトから @{...} ハッシュテーブルをコピーして、シェルを開いて ConvertTo-Json にパイプせずに JSON 相当のものが欲しかった経験はありませんか。そのためのツールです。PowerShell を貼り付ければ、きれいな JSON が返ってきます。単一のハッシュテーブル、[PSCustomObject] インスタンス、配列を含むネストした @{} ブロック全体、どれにも対応しています。
出力は ConvertTo-Json -Depth 100 で得られるものと一致します。ハッシュテーブルも [PSCustomObject] もどちらも JSON オブジェクトになります。配列(@(1,2,3))は JSON 配列になります。$null は null に、$true/$false は JSON のブール値になります。DateTime 値は ISO-8601 文字列として出力されます。PowerShell 7 と同じ規則です。
スペースや特殊文字を含むキーはクォートされたままになります。数値リテラル(42、3.14)は数値のまま。シングルクォート文字列もダブルクォート文字列も正しくパースされ、ダブルクォート内のエスケープシーケンス(`n、`t)は解決されます。複数のトップレベル代入を貼り付けると、それぞれが出力 JSON のキーになり、変数名が使われます。
使い方
3 ステップです。2 キーのハッシュテーブルでも、丸ごと設定ブロックでも、同じように動きます。
PowerShell を貼り付ける(またはサンプルを試す)
左のエディタにスクリプトの断片を貼り付けてください。ハッシュテーブル、[PSCustomObject]、ネストした @{} ブロック、オブジェクトの配列 — どれでも OK です。サンプルを読み込む で現実的な注文データの例が表示されます。
整形する必要はありません — $variable のプレフィックス、[PSCustomObject] のキャスト、コメントもそのままで大丈夫です。
変換を押す
緑の 変換 ボタンをクリックしてください。ツールがハッシュテーブルをパースし、ネストした構造をすべて辿って、一回のパスで JSON を組み立てます。
JSON をコピーする
右側のパネルにインデントされた JSON が表示されます。ARM テンプレート、Invoke-RestMethod の本文、Pester テスト用の JSON フィクスチャなどに貼り付けてください。
実際に役立つ場面
REST API リクエストボディの構築
<code>Invoke-RestMethod</code> で送信するハッシュテーブルを用意して、先に JSON の形を確認したいとき。貼り付けて確認、そしてリリースです。
設定ハッシュテーブルを JSON ファイルに変換
チームが <code>.psd1</code> 設定ファイルを使っているけれど、新しいサービスは JSON を期待している。そんなときはハッシュテーブルを貼り付けて出力を <code>config.json</code> として保存してください。
ARM / Bicep のパラメータファイル
ARM テンプレートのパラメータは JSON ですが、先に PowerShell のハッシュテーブルで組み立てることはよくあります。一度変換して JSON をコミットすれば済みます。
下流のツールにデータを渡す
PowerShell の CI スクリプトから Python、Node、または stdin で JSON を受け取るコンテナコマンドに構造化データを渡したいケースがあります。まさにその橋渡しです。
よくある質問
ConvertTo-Json の出力と一致しますか?
はい — ConvertTo-Json -Depth 100 -Compress:$false との整合性を目指しています。ハッシュテーブルも [PSCustomObject] オブジェクトも JSON オブジェクトになり、配列は JSON 配列、$null、$true、$false は通常どおりマッピングされます。
[PSCustomObject] と普通のハッシュテーブルの違いは?
どちらも同じ JSON オブジェクトに変換されます。[PSCustomObject] はプロパティの順序を保持します。このツールもそれを尊重します。普通のハッシュテーブルはデフォルトでアルファベット順 — ConvertTo-Json と同じです。
スクリプト全体を貼り付けてもいいですか?
はい、ただし出力に含まれるのはトップレベルの $variable = @{...} と [PSCustomObject]@{...} 代入だけです。関数定義、制御フロー、コマンドレット呼び出しは無視されます。トップレベルの変数はそれぞれ JSON のキーになり、変数名が使われます。
日付と数値の扱いは?
[DateTime] と Get-Date の出力は ISO-8601 文字列として出力されます。数値リテラル([decimal] を含む)は JSON の数値のままです。生の文字列として貼り付けた日付は文字列のまま保持されます。
コードは保存されますか?
変換のためにバックエンドに送信されますが、保存はされません — ペイロードはログに残しません。ハッシュテーブルにシークレットが含まれている場合は、貼り付ける前に編集してください。
ヒアストリングや複数行の文字列値に対応していますか?
はい。@"..."@ と @'...'@ のヒアストリングは、改行エンコードを保ったまま JSON 文字列として保持されます。
他にも役立つツール
PowerShell から JSON は、他のツールとも相性が良いです: