メモの日々


2022年04月01日(金) [長年日記]

[windows][howto] PowerShellでJSONを手軽に整形

Windowsで1行のJSONを整形して表示したかった。

フォーマットにこだわらなければ、PowerShell上でConvertFrom-JsonConvertTo-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