0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【PowerShell】JSONデータを解析する

Last updated at Posted at 2024-05-11

はじめに

仕事でPowerShellを時々使っていますが、ファイルのコピーや削除、OSやハードウェア情報の取得などの操作が多く、JSONやCSVなどのテキストを解析することはそれほどありませんでした。
そこで「PowerShellだとどうやってJSONを解析するんだろう?」と思い立って、調べてみた結果をまとめてみました。

解析するJSON

解析するJSON
$json = @"
{
  "Name" : "nkojima",
  "OS" : ["Windows", "Linux", "MacOS"],
  "Language" : ["C", "C++", "Java", "C#", "PowerShell"],
  "RDB" : {
    "Oracle" : ["10g", "11g", "12c", "19c"], 
    "MySQL" : ["5.1", "5.5", "5.6", "8.0"], 
    "PostgreSQL" : ["9.x", "15.x"], 
    "SQLite" : ["3.x"]
  }
}
"@

JSON形式の文字列からオブジェクトへの変換

  • JSON形式のテキストからオブジェクト(カスタムPSObject)に変換するには、ConvertFrom-Json関数を使います。
オブジェクトへの変換
$jsonContent = ($json | ConvertFrom-Json)

簡単な解析

  • オブジェクト(キーと値のペア)になっている部分は、メソッドチェーンのようにキーを指定します。
「Name」の要素を表示
$jsonContent.Name
実行結果
nkojima
  • $jsonContent.OSのように、値が配列になっている場合は配列が返されます。
「OS」の要素のデータ型を表示
$jsonContent.OS.GetType()
実行結果
IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array
  • 配列になっている部分を1要素ずつ取得する場合は、要素番号を指定します。
    • foreachを使う場合はこの限りではありません。
「Lanuguage」の値の2番目の要素を表示
$jsonContent.Language[2]
実行結果
Java

複雑な解析

  • オブジェクトと配列が入れ子になっている構造を解析する場合、for文を使って解析することが多いと思いますが...
  • オブジェクトの値が複数ある場合、これらの値を取り出すのに{オブジェクト}.psobject.Propertiesという構文を使っています。
    • もう少し単純な書き方が出来るとありがたいですが、現時点ではこれしか方法を見いだせていません。
DBの種類とバージョンを表示
foreach ($rdb in $jsonContent.RDB.psobject.Properties) {
    foreach ($dbVersion in $rdb.Value) {
        Write-Host "$($rdb.Name) : $($dbVersion)"
    }
}
実行結果
Oracle : 10g
Oracle : 11g
Oracle : 12c
Oracle : 19c
MySQL : 5.1
MySQL : 5.5
MySQL : 5.6
MySQL : 8.0
PostgreSQL : 9.x
PostgreSQL : 15.x
SQLite : 3.x

参考URL

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?