JSON to YAML 변환기
JSON을 YAML 형식으로 변환
JSON 입력
YAML 출력
JSON to YAML 변환이란?
JSON to YAML 변환은 JavaScript Object Notation 데이터를 YAML Ain't Markup Language로 변환하는 작업입니다. 두 형식은 동일한 데이터 구조(객체, 배열, 문자열, 숫자, 불리언, null)를 표현하지만 문법이 다릅니다. JSON은 중괄호, 대괄호, 쉼표를 사용하고, YAML은 들여쓰기와 줄 바꿈을 사용해 일반 텍스트에 가까운 출력을 생성합니다. XML과 달리 두 형식 모두 스키마가 필요하지 않습니다.
YAML은 사람이 읽기 쉬운 데이터 직렬화 형식으로 설계되었습니다. Kubernetes 매니페스트, Docker Compose 파일, Ansible 플레이북, GitHub Actions 워크플로, 그리고 많은 CI/CD 시스템의 기본 설정 언어입니다. 소스 데이터가 JSON이고 대상 시스템이 YAML을 요구할 때, 데이터 손실 없이 모든 값, 타입, 중첩 구조를 정확하게 보존하는 변환기가 필요합니다.
API 응답이나 내보낸 데이터를 JSON으로 받아 YAML 설정 파일에 붙여 넣어야 할 때 온라인 변환기가 유용합니다. 모든 표준 JSON 타입에 대해 변환은 무손실입니다. 문자열, 숫자, 불리언, null, 배열, 객체 모두 YAML 동등 표현으로 직접 매핑됩니다. 콜론이나 특수 문자가 포함된 값은 자동으로 따옴표 처리되어 유효한 YAML이 출력됩니다.
JSON을 YAML로 변환하는 이유
YAML은 설정 파일의 표준이고, JSON은 API가 반환하는 형식입니다. 두 형식 간 변환을 통해 데이터를 수동으로 다시 작성하지 않고 각 작업에 적합한 형식을 사용할 수 있습니다.
JSON to YAML 활용 사례
JSON vs YAML 비교
JSON과 YAML은 동일한 데이터를 표현할 수 있지만, 문법과 기능에서 특정 사용 사례에 중요한 차이가 있습니다.
| 특징 | JSON | YAML |
|---|---|---|
| Syntax | Curly braces, square brackets, colons, commas | Indentation-based, colons, dashes |
| Readability | Moderate — nested brackets become dense | High — visual hierarchy from indentation |
| Comments | Not allowed (RFC 8259) | Supported with # |
| Multi-line strings | Escape sequences only (\n) | Block scalars with | or > |
| Data types | string, number, boolean, null, object, array | Same plus date, timestamp, binary |
| File size | Slightly larger (brackets + quotes) | Slightly smaller (no brackets) |
| Trailing commas | Not allowed | Not applicable (no commas) |
| Spec | RFC 8259 / ECMA-404 | YAML 1.2 (yaml.org) |
변환 후 YAML 주의 사항
YAML에는 JSON에서 넘어온 개발자를 놀라게 하는 파싱 규칙이 있습니다. 다음 네 가지 문제가 변환된 출력 작업 시 가장 많은 버그를 유발합니다.
코드 예제
대부분의 언어에서 JSON을 YAML로 프로그래밍 방식으로 변환하려면 YAML 직렬화 라이브러리가 필요합니다. 표준 라이브러리는 JSON 파싱을 처리하고, YAML 출력에는 추가 패키지가 필요합니다.
import YAML from 'js-yaml'
const json = '{"host":"localhost","port":3000,"debug":true}'
const obj = JSON.parse(json)
const yamlStr = YAML.dump(obj, { indent: 2 })
console.log(yamlStr)
// → host: localhost
// → port: 3000
// → debug: trueimport json, yaml
json_str = '{"host": "localhost", "port": 3000, "debug": true}'
data = json.loads(json_str)
yaml_str = yaml.dump(data, default_flow_style=False, sort_keys=False)
print(yaml_str)
# → host: localhost
# → port: 3000
# → debug: truepackage main
import (
"encoding/json"
"fmt"
"gopkg.in/yaml.v3"
)
func main() {
jsonStr := `{"host":"localhost","port":3000,"debug":true}`
var data map[string]interface{}
json.Unmarshal([]byte(jsonStr), &data)
yamlBytes, _ := yaml.Marshal(data)
fmt.Println(string(yamlBytes))
// → debug: true
// → host: localhost
// → port: 3000
}# Using yq (https://github.com/mikefarah/yq)
echo '{"host":"localhost","port":3000}' | yq -P
# → host: localhost
# → port: 3000
# Using Python one-liner
echo '{"host":"localhost","port":3000}' | python3 -c "import sys,json,yaml; print(yaml.dump(json.load(sys.stdin), default_flow_style=False))"