YAMLをJSONに変換する方法[Python、PowerShell、Go]

多くのモダンなツールは、特に設定管理やInfrastructure as Code (IaC) の領域では、JSONYAMLファイルを使用して設定データを保存します。YAML形式のデータをJSON形式に変換する必要がある場合、この記事が役立ちます。

この記事では、Python、PowerShell、Goでのスクリプト作成を含む、YAMLからJSON形式にデータを変換するためのいくつかの方法を学びます。

前提条件

このチュートリアルの例に従いたい場合は、以下の要件を満たしていることを確認してください。

  • A code editor. This article will use Visual Studio Code version 1.55.1. Feel free to use any code editor you want.
  • YAMLからJSONに変換するためには、サンプルのYAMLコンテンツが必要です。以下の内容をoperating-systems.ymlという新しいファイルにコピーしてください。YAMLファイルを作業ディレクトリに保存します。
operating-systems.yml
Windows 10: 100
Windows Server 2019: 50
Windows Server 2022: 1
MacOS: 3
CentOS: 75
Photon: 12

YAMLをJSONに変換するためのPythonの使用方法

Pythonは自動化に使用するには優れた言語です。しかし、Pythonの機能を拡張し、YAMLからJSONにドキュメントを変換することができることを知っていましたか?そして、わずかな手順を実行するだけで、すぐにYAMLからJSONに変換を開始できます。

このセクションの例では、Python 3.9PIP(この執筆時点での最新バージョンは21.0.1です)をインストールしている必要があります。

PythonへのYAMLのサポートの追加

Pythonには、デフォルトではYAMLのサポートがありません。つまり、PythonはデフォルトではYAMLドキュメントを読み取ったり解釈したりすることができません。PythonにYAMLのサポートを追加するには、まずPyYAMLモジュールをインストールする必要があります。

PyYAMLモジュールをインストールするには、Pythonのパッケージインストーラであるpipコマンドを実行する必要があります。以下の手順に従ってください。

まず、コマンドプロンプトやPowerShellなど、お好みのコマンドインタープリタを開きます。どちらのインタープリタでもpipコマンドが動作するはずです。この例ではPowerShellを使用します。

次に、PowerShellで以下のコマンドを実行します。このコマンドはPyYAMLモジュールをインストールします。

pip install pyyaml

以下のスクリーンショットで確認できるように、pipはPyYAMLの最新バージョン(この執筆時点でのバージョンは5.4.1)をインストールしました。

Installing the PyYAML module

変換スクリプトの作成

必要なモジュール(PyYAML)をインストールしたので、変換スクリプトを作成する準備が整いました。YAMLからJSONへのPythonスクリプトを作成するには、以下の手順に従ってください。

1. コードエディタを開き、作業ディレクトリにconvert-os.pyという名前の新しいファイルを作成します。このファイルがスクリプトです。

2. 下記のコードをコピーして、空のconvert-os.pyファイルに貼り付けます。このスクリプトは、operating-systems.ymlのYAMLコンテンツを読み取り、コンテンツをJSON形式に変換し、JSON出力をpython_operating-systems.jsonファイルに書き込みます。

## convert-os.py
## JSONとYAMLを処理するためのモジュールをインポート
import yaml
import json

## インポートするデータを保持するための変数を作成
os_list = {}

## YAMLファイルを読み取る
with open("c:\temp\operating-systems.yml") as infile:
     # YAMLを定義した変数にマーシャリングします os_list = yaml.load(infile, Loader=yaml.FullLoader)     # リストをコンソールに表示します。 print(os_list)
 Open a file to write the JSON output. The 'w' makes the file writable
 with open("c:\temp\python_operating-systems.json", 'w') as outfile:
     # JSONをマーシャリングし、"indent"を設定することでファイルをより読みやすくします json.dump(os_list, outfile, indent=4) print("JSONファイルが書き込まれました。")

3. convert-os.pyスクリプトを保存します。

変換スクリプトの実行方法

変換スクリプトを作成したら、テストしてみましょう。以下の手順でYAMLからJSONへのPythonスクリプトを実行します。

1. ターミナルウィンドウを開きます。この記事ではPowerShellを使用していますが、コマンドプロンプト(CMD)でも同じように動作します。

2. 以下のコマンドをコピーしてPowerShellに貼り付け、Enterキーを押して実行します。このコマンドは、前のセクションで作成したconvert-os.pyスクリプトを呼び出すためにPython実行可能プログラムを実行します。コマンドを実行すると、以下のような画像の出力が表示され、同じ出力がc:\temp\python_operating-systems.jsonファイルに保存されます。

python c:\temp\convert-os.py

実行したコマンドの後、同じ画像のような出力が表示されるはずです。 コマンドはJSONの出力を画面に表示し、同じ出力をc:\temp\python_operating-systems.jsonファイルに保存します。

Running the YAML to JSON conversion script using Python

3. 最後に、python_operating-systems.jsonという名前のJSONファイルを開きます。この例では、メモ帳でファイルを開くために、PowerShellで以下のコマンドを実行します。

notepad C:\temp\python_operating-systems.json
Viewing the python_operating-systems.json file in notepad

PowerShellを使用してYAMLをJSONに変換する

PowerShellはテキストファイルを変更したり、オブジェクトをJSONなどの複数の形式に変換したりすることができます。PowerShellは拡張可能なため、適切なモジュールを使用してYAMLをJSON形式に変換することができます。

PowerShellにYAMLサポートを追加する

PowerShellにはJSONコンテンツを扱うための組み込みサポートがありますが、YAMLにはありません。幸いなことに、PowerShellを拡張してYAMLファイルをサポートするモジュールがあります。このモジュールはPowerShell-yamlと呼ばれ、この文章を書いた時点での最新バージョンは0.4.2です。次の手順に従ってモジュールをインストールしてください。

1. コンピューター上でPowerShellセッションを開きます。

2. 以下のコマンドをコピーしてPowerShellに貼り付け、Enterキーを押します。このコマンドは、Install-Moduleコマンドレットを使用してPowerShell-yamlモジュールをインストールします。

Install-Module PowerShell-yaml

3. モジュールをインストールした後、PowerShell-yamlモジュールの一部として、2つの新しいコマンドレットがPowerShellで利用可能になります。これらの新しいコマンドレットは次のとおりです:

ConvertFrom-Yaml – YAMLデータをハッシュテーブルに変換するためのコマンドレットです。

ConvertTo-Yaml – ハッシュテーブルオブジェクトをYAMLデータに変換するためのコマンドレットです。

PowerShellで両方のコマンドレットが利用可能かどうかを確認するには、以下のコマンドをPowerShellで実行してください。

Get-Command -Module PowerShell-yaml

下記のように、Get-Commandコマンドレットは、PowerShell-yamlモジュールからのコマンドレットをリストアップしました。

Getting the PowerShell-yaml cmdlets

変換スクリプトの作成

YAMLからJSONへの変換PowerShellスクリプトを作成するには、以下の手順に従ってください。

1. コードエディタを開き、作業ディレクトリにconvert-os.ps1という新しいファイルを作成します。

2. 下記のコードをコピーして、空白のconvert-os.ps1ファイルに貼り付けます。以下のコードスニペットは、operating-systems.ymlファイルを読み取り、JSONに変換します。JSON形式に変換された後、JSONをPowerShell_operating-systems.jsonファイルに保存します。

#convert-os.ps1
 #Get-Contentを使用してYAMLファイルを読み取り、ConvertFrom-Yamlを使用してデータをハッシュテーブルに変換します。$os_list変数にハッシュテーブルオブジェクトが保存されます。
 $os_list = (Get-Content -Path "C:\temp\operating-systems.yml" | ConvertFrom-Yaml)
 #ConvertTo-Jsonを使用して$os_list変数内のハッシュテーブルオブジェクトをJSON形式に変換します。JSON形式になったら、Set-Contentを使用してC:\temp\PowerShell_operating-systems.jsonファイルに保存します。
 Set-Content -Path "C:\temp\PowerShell_operating-systems.json" -Value ($os_list | ConvertTo-Json)

3. convert-os.ps1ファイルを保存します。

変換スクリプトの実行

変換スクリプトを作成したので、次のステップはYAMLからJSONに変換するために実行することです。PowerShellの変換スクリプトを実行するには、以下の手順に従ってください。

  1. まだ開いていない場合は、PowerShellウィンドウを開きます。

2. 以下のコマンドをコピーしてPowerShellに貼り付け、Enterキーを押します。このコマンドは、前のセクションで作成したconvert-os.ps1スクリプトを呼び出します。

c:\temp\convert-os.ps1

3. スクリプトを実行した後、前のステップでconvert-os.ps1スクリプトが作成したJSON出力ファイルC:\temp\PowerShell_operating-systems.jsonを開きます。これを行うには、以下のコマンドをPowerShellで実行してPowerShell_operating-systems.jsonをメモ帳で開きます。

notepad C:\temp\PowerShell_operating-systems.json
Viewing the content of the PowerShell_operating-systems.json file

Goを使用してYAMLからJSONに変換する

PythonとPowerShellはどちらも高水準の言語です。高水準であるため、スクリプトの作成は容易になりますが、制御力が少し制限されます。一方、Goは低水準の言語であり、YAMLデータのインポートがより複雑になります。

このセクションの例では、Goを使用します。この執筆時点での最新バージョンはgo1.16.3です。Goをまだインストールしていない場合は、ダウンロードおよびインストールページを参照してコンピュータにインストールしてください。

GoにYAMLサポートを追加する

PowerShellとPythonと同様に、JSONサポートはGoのコアライブラリの一部ですが、YAMLは含まれていません。GoでYAMLサポートを追加するには、まずgo get コマンドを使用してYAML.v3パッケージをインストールする必要があります。YAML.v3パッケージをインストールするには:

まず、コンピュータ上でコマンドプロンプトまたはPowerShellなど、使用するコマンドシェルを開きます。この例ではPowerShellを使用します。

次に、以下のコマンドをコピーしてPowerShellで実行します。このコマンドは、パッケージ名がgopkg.in/yaml.v3であるパッケージをダウンロードしてインストールします。

go get gopkg.in/yaml.v3
Installing the yaml.v3 package in Go

変換スクリプトの作成

YAMLからJSONへの変換Goスクリプトを作成するには、次の手順に従ってください。

1. コードエディタを開いて、作業ディレクトリにconvert-os.goという名前の新しいファイルを作成します。

2. 下記のコードをコピーして空白のconvert-os.goファイルに貼り付けます。このコードは、必要なパッケージをインポートし、いくつかのメモリ構造を定義し、YAMLファイルをインポートし、JSONに変換してc:\temp\go_operating-systems.jsonという名前のJSONファイルに書き込みます。

// これはgoにどの関数をロードするかを伝えます。
 package main
 // パッケージをインポート:
 import (
  // JSONモジュール
     "encoding/json"
  // 画面に出力するためのモジュール
     "fmt"
  // ファイルの読み書きのためのモジュール
     "io/ioutil"
 // YAMLモジュール
     "gopkg.in/yaml.v3"
 )
 // 二つの"Struct"を定義します。これらはメモリ内のデータ構造であり、
 // YAMLとJSONファイルの形式に一致します。
 type operatingSystems struct {
     Windows10         int yaml:"Windows 10"
     WindowsServer2019 int yaml:"Windows Server 2019"
     WindowsServer2022 int yaml:"Windows Server 2022"
     MacOS             int yaml:"MacOS"
     CentOS            int yaml:"CentOS"
     Photon            int yaml:"Photon"
 }
 type operatingSystemsjson struct {
     Windows10         int json:"Windows 10"
     WindowsServer2019 int json:"Windows Server 2019"
     WindowsServer2022 int json:"Windows Server 2022"
     MacOS             int json:"MacOS"
     CentOS            int json:"CentOS"
     Photon            int json:"Photon"
 }
 func main() {
   // ユーザーにプロセスが開始されたことを知らせます。
     fmt.Println("Parsing YAML file")
 // 入力ファイルへのパスを定義します。
 var fileName string = "c:\temp\operating-systems.yml"
 // ファイルからYAMLを読み込みます。このステップではエラーハンドリングが必要です。
 yamlFile, err := ioutil.ReadFile(fileName)
     if err != nil {
         fmt.Printf("Error reading YAML file: %s\n", err)
         return
     }
 // YAMLをStructに展開します。
     var oses operatingSystems
     yaml.Unmarshal(yamlFile, &oses)
 // YAML Structのデータを使用してJSON Structを作成します。
 var osesjson = operatingSystemsjson{
         Windows10:         oses.Windows10,
         WindowsServer2019: oses.WindowsServer2019,
         WindowsServer2022: oses.WindowsServer2022,
         MacOS:             oses.MacOS,
         CentOS:            oses.CentOS,
         Photon:            oses.Photon,
     }
 // JSON形式で出力するための文字列を作成します。
 jsonOutput, err := json.Marshal(osesjson)
 // 結果を画面に出力します。%+vは変数名がデータと一緒に表示されることを意味します。これが
   // 出力されたキー名にスペースがない理由です。
   // JSONファイルを書き込みます。
     fmt.Printf("Result: %+v\n", osesjson)
 
 err = ioutil.WriteFile("c:\temp\Go_operating-systems.json", jsonOutput, 0644)
 }

3. convert-os.goファイルを保存してください。

変換スクリプトの実行

Goスクリプトの実行には、スクリプトのファイル名に続いてgo run コマンドを使用します。YAMLからJSONへの変換Goスクリプトを実行するには、次の手順を実行してください。

1. コンピュータ上で使用するコマンドシェルを開いてください。Windowsの場合、コマンドプロンプトまたはPowerShellのいずれでもgoコマンドが動作します。この例ではPowerShellを使用してgoを実行します。

2. PowerShellに入ったら、以下のコマンドをコピーしてPowerShellで実行してください。このコマンドはgo runコマンドを呼び出してc:\temp\convert-os.goスクリプトを実行します。

go run c:\temp\convert-os.go
Running Convert-os Go script.

3. スクリプトを実行した後、前の手順でconvert-os.goスクリプトが作成した出力ファイルC:\temp\Go_operating-systems.jsonを開いてください。この例では、Go_operating-systems.jsonをメモ帳で開きます。

Viewing the Go_operating-systems.json in notepad

結論

この記事では、Python、PowerShell、Goのスクリプトを使用してYAMLデータとファイルをJSONに変換する方法を学びました。YAMLからJSONへの変換の異なる方法を学んだので、どの方法をより多く使用すると思いますか?

Source:
https://adamtheautomator.com/yaml-to-json/