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
[ツッコミを入れる]