こんにちは、PowerShellが好きなwakです。
こんな記事を読んだので、さくっとPowerShell版も書いておきます。
ねこのひらき(を再度閉じたやつ)
やってみる
何も考えずにPowerShellを立ち上げて、以下のブロックをコピペしてください。*1
# とりあえずハッシュを用意する $hash = @{ Number = 123; String = "ABCあいう"; Object = @{ a = "A"; b = 1; }; } # 後からハッシュに要素を追加してみる $hash.Array = @(1, 2, 3) $hash | ConvertTo-Json
実行結果はこうなります。
インデントが邪魔なときは -Compress
オプションを付けると1行に圧縮してくれます。
簡単な説明
PowerShellでは、
- ハッシュは
@{Key1=1; Key2=2; Key=3;}
の書式で記述します。最後のセミコロンはあってもなくても構いません。 - 配列は
@("value1", "value2", "value3")
の書式で記述します。残念ながら余計なカンマは許容されません。
結果をクリップボードにコピーする
末尾に | clip
と付ければ結果をクリップボードへコピーすることができます。これが一番簡単です。
$hash | ConvertTo-Json | clip
ただ、結果の中に非ASCII文字が入っていると文字化けしてしまいます(上述の「あいう」など)。ちょっとだけ面倒ですが対応は可能です。まず次のブロックをコピペして(最初の1回だけでOKです)、テキストをクリップボードにコピーするための関数を定義しておきましょう。
function Out-ClipBoard { param([parameter(Mandatory=$true, ValueFromPipeline=$true)][object[]]$InputObject) begin { Add-Type -AssemblyName System.Windows.Forms $tb = New-Object System.Windows.Forms.TextBox $tb.Multiline = $true $tb.MaxLength = 0 $out=@() } process { $out+=$InputObject } end { $tb.Text = $out -join "`r`n" $tb.SelectAll() $tb.Copy() } }
これは内部的にWindows Formのテキストボックスを生成し、テキストをセット・全選択・コピーするという力業で実現しています。この準備をしておいた上で、末尾に| Out-ClipBoard
を付ければ結果をクリップボードへ正しくコピーすることができます。
$hash | ConvertTo-Json | Out-ClipBoard
結果をファイルに出力する
\
記号のエスケープは必要ありません。
$hash | ConvertTo-Json | Out-File "c:\temp\hoge.txt" -Encoding UTF8
こんなところです。
*1:なお、PowerShell 3.0以降が必要です。普通の環境では特に気にする必要はありませんが、Windows Server 2008 R2を更新せずに使っているような人は諦めてください。