【Powershell】テキストファイルの複数の値をjson形式の要素として扱う方法

Powershell Powershell

テキストファイルの複数の値をjson形式(文字列)の要素として扱いpostのパラメータとして利用したい場面があったので、複数の値をjson形式(文字列)の要素として扱う方法を調べてまとめてみました。

JSON形式への変換は、コマンドとしては[ConvertTo-Json]を利用します。

また、上記で実施した内容と逆のことを実行すると、json形式の文字列を値の抽出が可能なオブジェクトとして扱い、各値を変数として格納することもできますので合わせて紹介していきます。

その場合にはコマンドとして[ConvertFrom-Json]を利用します。

広告

テキストファイルの複数の値をjson形式(文字列)の要素として扱う

今回は[color.txt]に記載された「red,blue,green,pink」の複数の値をjson形式のcolorに配列として格納させ、最終的に以下のような形式になるようにしていきます。

{
    "color":  [
                  "red",
                  "blue",
                  "green",
                  "pink"
              ],
    "hoge":  "hoge"
}

準備(テキストファイルの用意)

以下の内容で[colour.txt]を用意します。

今回はこのテキストファイルを[c:\hogehgoe\]のフォルダに配置して実行していきます。

color.txt

red
blue
green
pink

powershellコマンド

以下のコマンドを実行することで、テキストファイルに記載された複数の値をjson形式(文字列)の要素として扱うことができます。

#JSON形式の元となる配列を作成
$hash_table = @{color = @(); hoge = "hoge"}

#[color.txt]の読み込み
$color = Get-Content "c:\hogehoge\color.txt"

#変数$colorの値を配列に格納
foreach ($value in $color)
{
    $hash_table.color += $value.ToString()
}

#JSON形式へ変換
$json = $hash_table | ConvertTo-Json

#結果の表示
$json

実行結果

上記のコマンドの実行結果は以下の通りとなり、JSON形式に変換することができます。

powershellコマンド実行結果

各変数の型も確認します。

powershellコマンド実行結果(型の確認)

[$json]はstring型になっていることがわかります。

[参考] ToString() を除くと余分な情報まで格納される

コマンド内の[#colorの値を配列に格納]の処理について、ToString() を除くと余分な情報まで格納されるので、純粋に値だけを格納したい場合にはToString()メソッドは入れるようにしてください

参考までに、ToString()を除いた場合の結果は以下のようになります。

ToString()を除いた場合の結果

[$json]の[color]の各値には、変数[$color]の値が持っていたすべての情報(PSPath や PSParentPath など)が配列として格納されていることがわかります。

[参考] for文の形式でも可能

上記で紹介したコマンドのforeach部分はfor文でも利用可能です。

for ($i=0; $i -lt 10; $i++)
{
  if($color[$i] -ne $null)
  {
    $hash_table.color += $color[$i].ToString()
  }
}

実行すると同じ結果になるかと思います。

広告

json形式の文字列を値の抽出が可能なオブジェクトとして変換する

[json形式の文字列を値の抽出が可能なオブジェクトとして変換する]という、上記で実行してきたことと逆のことを行います。

今回は上記で作成した変数[$json]の中にある[pink]という値を変数[$value]に格納します。

powershellコマンド

powershellコマンドは以下のようになります。

$hash_table_obj = $json | ConvertFrom-Json
$value = $hash_table_obj.color[3]
$value

実行結果

以下のように、想定通り $value には [pink] という値が格納されました。

$value に [pink] が格納された結果

コメント

タイトルとURLをコピーしました