見出し画像

PowerShell JSONファイルの読み書き(ネスト罠対応)

JSONの記事は前にも書きましたが書き直して再投稿です。


JSONファイルの読み書きには
コマンドレットConvertFrom-Json、ConvertTo-Jsonを使います。




JSON形式のファイルから読み込み

JSONファイルを読み込んで扱うにはConvertFrom-JsonでPowerShellオブジェクトに変換します。

$jsonContent = (Get-Content 読み込むJSONファイルのパス | ConvertFrom-Json)


例えばc:\temp\test.jsonがありこれを読み取るには

$jsonContent = (Get-Content "c:\temp\test.json" | ConvertFrom-Json)


ファイルの中身が次のようになっていたとする


{
  "name": "cortana",
  "age": 123,
  "hobby": [
    "fishing",
    "swimming"
  ],
  "test":{
    "test1":1,
    "test2":{
      "test3":3,
      "test4":{
        "test5":5,
        "test6":{
          "test7":7
        }
      }
    }
  }
}



読み込んだデータにアクセスするにはこのようにする
$jsonContent.name
$jsonContent.hobby
$jsonContent.hobby[1]
$jsonContent.test.test2.test4.test6.test7





JSON形式のファイルを書き込む


JSON形式のファイルを作るにはConvertTo-Jsonを使います。
ただそのまま使うとネストが2階層までしかファイルに書き込まれないのでオプション-Depthでネスト数を指定します。

$jsonContent | ConvertTo-Json -Depth 4 | Out-File "c:\temp\example.json"


ネスト数を指定しなかった場合、階層の深い部分がつぶれてしまいます。


ハッシュ形式をJSONファイルに保存する

ハッシュ形式をJSONファイルに保存する場合もConvertTo-Jsonを使います。

例えばこのようなハッシュ変数があったとします。


$hash = @{
 name = "cortana";
 age = 123;
 hobby = @(
   "fishing", "swimming"
 );
 test = @{ 
   test1 = 1;
   test2 = @{
     test3 = 3; 
     test4 = @{
       test5 = 5; 
       test6 = @{
         test7 = 7; 
       };
     };
   }; 
 };
}

ファイルにJSONとして出力したい場合

$hash | ConvertTo-Json -Depth 4 | Out-File "c:\temp\example2.json"


この場合も-Depthオプションを付けておかないと正しくファイルになりません。

#PowerShell #JSON #JSON変換 #ハッシュ #ハッシュ変換  #プログラミング #プログラミング学習 #コマンドレット #Windows

この記事が気に入ったらサポートをしてみませんか?