YAML을 JSON으로 변환하는 방법 [Python, PowerShell, Go]

많은 현대 도구들, 특히 구성 관리 및 코드로서의 인프라(IaC) 공간에서는 JSON 또는 YAML 파일을 사용하여 구성 데이터를 저장합니다. 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

Python을 사용하여 YAML을 JSON으로 변환하기

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 키를 누르세요. 이 명령은 Python 실행 파일을 실행하여 이전 섹션에서 만든 convert-os.py 스크립트를 호출합니다.

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 파일을 엽니다. 이 파일은 convert-os.py Python 스크립트가 생성했어야 합니다. 이 예에서는 메모장에서 파일을 열려면 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은 지원되지 않습니다. 다행히도 YAML 파일을 지원하기 위해 PowerShell을 확장하는 모듈이 있습니다. 이 모듈의 이름은 PowerShell-yaml이며, 작성 시점의 최신 버전은 0.4.2입니다. 이 모듈을 설치하려면 다음 단계를 따르십시오.

1. 컴퓨터에서 PowerShell 세션을 엽니다.

2. 아래 명령을 복사하여 PowerShell에 붙여넣고 Enter 키를 누르세요. 이 명령은 Install-Module cmdlet을 사용하여 PowerShell-yaml 모듈을 설치합니다.

Install-Module PowerShell-yaml

3. 모듈을 설치한 후에는 PowerShell의 일부로서 두 개의 새로운 cmdlet이 사용 가능해집니다. 이러한 새로운 cmdlet은:

ConvertFrom-Yaml – YAML 데이터를 해시 테이블로 변환하는 cmdlet입니다.

ConvertTo-Yaml – 해시 테이블 객체를 YAML 데이터로 변환하는 cmdlet입니다.

PowerShell에서 두 cmdlet이 모두 사용 가능한지 확인하려면 PowerShell에서 아래 명령을 실행하세요.

Get-Command -Module PowerShell-yaml

아래에서 볼 수 있듯이 Get-Command cmdlet은 PowerShell-yaml 모듈에서 cmdlet을 나열했습니다.

Getting the PowerShell-yaml cmdlets

변환 스크립트 작성

YAML을 JSON으로 변환하는 PowerShell 스크립트를 작성하려면 다음 지침을 따르세요.

1. 코드 편집기를 열고 작업 디렉토리에 convert-os.ps1이라는 새 파일을 만듭니다.

2. 아래 코드를 복사하여 빈 convert-os.ps1 파일에 붙여넣으세요. 아래 코드 스니펫은 operating-systems.yml 파일을 읽고 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)
 # $os_list 변수에 있는 해시테이블 객체를 ConvertTo-Json을 사용하여 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 지원을 추가하려면 YAML.v3 패키지를 먼저 go get 명령어를 사용하여 설치해야 합니다. 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 로드하기. Go는 이 단계에 대한 오류 처리를 필요로 합니다.
 yamlFile, err := ioutil.ReadFile(fileName)
     if err != nil {
         fmt.Printf("Error reading YAML file: %s\n", err)
         return
     }
 // YAML을 구조체로 추출하기
     var oses operatingSystems
     yaml.Unmarshal(yamlFile, &oses)
 // YAML 구조체의 데이터를 사용하여 JSON 구조체 생성하기
 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는 변수 이름과 데이터가 함께
   // 출력되도록 하는 것을 의미합니다. 이것이
   // 출력되는 키 이름에 공백이 없는 이유입니다.
     fmt.Printf("Result: %+v\n", osesjson)
 // JSON 파일 쓰기
 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/