2022年04月01日(金) [長年日記]
■ [windows][howto] PowerShellでJSONを手軽に整形
Windowsで1行のJSONを整形して表示したかった。
フォーマットにこだわらなければ、PowerShell上でConvertFrom-JsonとConvertTo-Jsonを組合せて次のようにするのが一番手軽に思えたがどうだろうか。
convertfrom-json '{"a": 1, "b1": {"b2": {"b3": {"b4": 2}}}, "c": ["hello", "world"]}' ` | convertto-json
{ "a": 1, "b1": { "b2": { "b3": "@{b4=2}" } }, "c": [ "hello", "world" ] }
ただし、よく見ると "b3" の所がおかしい。
これは ConvertTo-Json に -Depth オプションを指定すれば解決する。
convertfrom-json '{"a": 1, "b1": {"b2": {"b3": {"b4": 2}}}, "c": ["hello", "world"]}' ` | convertto-json -depth 3
{ "a": 1, "b1": { "b2": { "b3": { "b4": 2 } } }, "c": [ "hello", "world" ] }
2022年04月04日(月) [長年日記]
■ [windows] PowerShellで角括弧を含むファイルにアクセスする
PowerShell上で例えば、
- test[1].txt
というファイルの内容を表示しようと
> get-content test[1].txt
としてもエラーになってしまう。
get-content : 指定されたパス test[1].txt にオブジェクトが存在しないか、-Include または -Exclude パラメーターによってフィルターされています。 発生場所 行:1 文字:1 + get-content test[1].txt + ~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (System.String[]:String[]) [Get-Content], Exception + FullyQualifiedErrorId : ItemNotFound,Microsoft.PowerShell.Commands.GetContentCommand
原因は、角括弧がPowerShellのワイルドカードと解釈されるからみたい。
解決するには、「`」を使ってワイルドカード文字をエスケープする(更にシングルクウォートで囲う必要がある)
> get-content 'test`[1`].txt'
か、 -LiteralPath オプションを使用する。
> get-content -literalpath test[1].txt