การแปลง JSON เป็น YAML คืออะไร?
การแปลง JSON เป็น YAML คือการเปลี่ยนข้อมูลจาก JavaScript Object Notation ไปเป็น YAML Ain't Markup Language ทั้งสองรูปแบบแสดงโครงสร้างข้อมูลเหมือนกัน (objects, arrays, strings, numbers, booleans, null) แต่ใช้ไวยากรณ์ต่างกัน JSON ใช้วงเล็บปีกกา วงเล็บเหลี่ยม และเครื่องหมายจุลภาค ส่วน YAML ใช้การย่อหน้าและการขึ้นบรรทัดใหม่ ทำให้ผลลัพธ์อ่านง่ายใกล้เคียงกับข้อความธรรมดา ต่างจาก XML ทั้งสองรูปแบบไม่จำเป็นต้องมี schema
YAML ถูกออกแบบมาให้เป็นรูปแบบการจัดเก็บข้อมูลที่เป็นมิตรกับมนุษย์ เป็นภาษา configuration เริ่มต้นสำหรับ Kubernetes manifests, Docker Compose files, Ansible playbooks, GitHub Actions workflows และระบบ CI/CD อีกมากมาย เมื่อข้อมูลต้นทางเป็น JSON แต่ระบบปลายทางต้องการ YAML คุณต้องใช้ตัวแปลงที่รักษาทุกค่า ทุกประเภท และทุกระดับการซ้อนได้อย่างแม่นยำโดยไม่สูญเสียข้อมูล
การแปลง JSON เป็น YAML ออนไลน์มีประโยชน์เมื่อคุณได้รับ API responses หรือข้อมูลที่ส่งออกมาเป็น JSON และต้องนำไปวางใน YAML config file การแปลงนี้ไม่สูญเสียข้อมูลสำหรับประเภทข้อมูล JSON มาตรฐานทั้งหมด ได้แก่ strings, numbers, booleans, null, arrays และ objects ซึ่งแมปตรงกับค่าเทียบเท่าใน YAML ค่าที่มีโคลอนหรืออักขระพิเศษจะถูกใส่เครื่องหมายคำพูดโดยอัตโนมัติเพื่อให้ผลลัพธ์เป็น YAML ที่ถูกต้อง
ทำไมต้องแปลง JSON เป็น YAML?
YAML เป็นมาตรฐานสำหรับ config files ส่วน JSON คือสิ่งที่ API ส่งกลับมา การแปลงระหว่างทั้งสองรูปแบบช่วยให้คุณใช้รูปแบบที่เหมาะสมสำหรับแต่ละงานโดยไม่ต้องเขียนข้อมูลใหม่ด้วยมือ
⚡แปลงทันที
วาง JSON แล้วรับผลลัพธ์ YAML ทันที ไม่ต้องรอการประมวลผลจากเซิร์ฟเวอร์ ไม่ต้องอัปโหลดไฟล์ ไม่มีการจำกัดจำนวนครั้ง
🔒ประมวลผลโดยให้ความเป็นส่วนตัวเป็นอันดับแรก
ข้อมูลของคุณไม่ออกจากเบราว์เซอร์ การแปลงทำงานด้วย JavaScript บนอุปกรณ์ของคุณทั้งหมด ดังนั้น credentials, tokens และ API keys จึงยังคงเป็นความลับ
🔀รองรับโครงสร้าง JSON ทุกรูปแบบ
objects ที่ซ้อนกันลึก arrays ขนาดใหญ่ ประเภทข้อมูลผสม Unicode strings และอักขระพิเศษล้วนแปลงได้อย่างถูกต้อง เครื่องมือนี้รักษาโครงสร้างข้อมูลทั้งหมดไว้
📋ไม่ต้องสร้างบัญชีหรือติดตั้ง
เปิดหน้าเว็บแล้วเริ่มแปลงได้เลย ไม่ต้องสมัครสมาชิก ไม่ต้องใช้ extension ไม่ต้องติดตั้ง CLI tool รองรับทุกอุปกรณ์ที่มีเบราว์เซอร์
กรณีใช้งานการแปลง JSON เป็น YAML
Kubernetes และ Docker Compose
API responses และ configs ที่ส่งออกมามักมาในรูปแบบ JSON แปลงเป็น YAML เพื่อใช้โดยตรงใน Kubernetes manifests, Helm charts และ Docker Compose files
การกำหนดค่า CI/CD Pipeline
GitHub Actions, GitLab CI, CircleCI และ Azure Pipelines ล้วนใช้ YAML เมื่อสร้าง pipeline configs ด้วยโปรแกรมจาก JSON ให้แปลงผลลัพธ์ก่อน commit
Ansible Playbooks
Ansible ต้องการ YAML สำหรับ playbooks และ inventory files แปลง JSON inventory exports จาก cloud APIs ให้เป็นรูปแบบ YAML ที่ Ansible ต้องการ
การตรวจสอบ API Response
REST APIs ส่งคืนข้อมูลเป็น JSON การแปลง response ที่ซ้อนกันเป็น YAML ทำให้มองเห็นลำดับชั้นของข้อมูลได้ในทันที ซึ่งสแกนได้เร็วกว่า JSON ที่เต็มไปด้วยวงเล็บ
การย้าย Configuration File
เมื่อย้ายแอปพลิเคชันจาก config ที่ใช้ JSON (เช่น tsconfig.json, package.json exports) ไปยังเครื่องมือที่ใช้ YAML ให้แปลงค่าเป็นชุดแทนที่จะพิมพ์ใหม่ทีละค่า
การเรียนรู้และเอกสาร
นักศึกษาและนักเขียนเทคนิคใช้การเปรียบเทียบ JSON/YAML แบบเคียงข้างกันเพื่อทำความเข้าใจว่าโครงสร้างข้อมูลแมประหว่างรูปแบบอย่างไร เครื่องมือนี้ให้ตัวอย่างที่แม่นยำทันที
เปรียบเทียบ JSON กับ 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 มีกฎการ parse ที่อาจทำให้นักพัฒนาที่มาจาก JSON แปลกใจ สี่ปัญหานี้เป็นสาเหตุของบั๊กมากที่สุดเมื่อทำงานกับผลลัพธ์ที่แปลงแล้ว
yes/no ที่ไม่ใส่เครื่องหมายคำพูดจะกลายเป็น Booleans
YAML 1.1 parsers ถือว่า yes, no, on, off, true และ false ล้วนเป็น booleans หาก JSON ของคุณมีค่า string "yes" หรือ "no" ผลลัพธ์ YAML อาจสูญเสียเครื่องหมายคำพูดและถูก parse เป็น boolean โดยเครื่องมือรุ่นเก่า YAML 1.2 จำกัดเฉพาะ true/false เท่านั้น
ข้อผิดพลาดในการย่อหน้าทำให้ parse ล้มเหลว
YAML ใช้การย่อหน้าเพื่อกำหนดโครงสร้าง ช่องว่างที่เกินมาหรือขาดไปเพียงหนึ่งช่องอาจเปลี่ยนความหมายหรือทำให้เกิดข้อผิดพลาดในการ parse ต่างจาก JSON ที่เครื่องหมายจุลภาควางผิดตำแหน่งจะให้ข้อผิดพลาดชัดเจน ข้อผิดพลาดการย่อหน้าใน YAML อาจเปลี่ยนลำดับชั้นข้อมูลได้อย่างเงียบๆ
โคลอนในค่าต้องใส่เครื่องหมายคำพูด
โคลอนตามด้วยช่องว่าง (": ") คือตัวคั่น key-value ของ YAML หาก JSON string ของคุณมีลำดับนั้น (เช่น "http://example.com") ผลลัพธ์ YAML ต้องใส่เครื่องหมายคำพูดให้ค่า ตัวแปลงส่วนใหญ่จัดการสิ่งนี้โดยอัตโนมัติ
ไฟล์หลายเอกสาร
YAML รองรับหลายเอกสารในไฟล์เดียวโดยคั่นด้วย --- JSON ไม่มีสิ่งเทียบเท่า เมื่อแปลง JSON array ของ configs แต่ละ element อาจกลายเป็นเอกสาร YAML แยกกัน หรือคงอยู่เป็น array items ให้รู้ว่าเครื่องมือปลายทางคาดหวังรูปแบบใด
ตัวอย่างโค้ด
การแปลง JSON เป็น YAML ด้วยโปรแกรมต้องใช้ไลบรารี YAML serialization ในภาษาส่วนใหญ่ ไลบรารีมาตรฐานจัดการการ parse JSON ส่วนผลลัพธ์ YAML ต้องการ package เพิ่มเติม
JavaScript (Node.js)
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: truePython
import 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: trueGo
package 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
}CLI (yq / jq + Python)
# 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))"คำถามที่พบบ่อย
การแปลง JSON เป็น YAML สูญเสียข้อมูลหรือไม่?
ไม่สูญเสีย สำหรับประเภทข้อมูล JSON มาตรฐานทั้งหมด Strings, numbers, booleans, null, arrays และ objects มีค่าเทียบเท่าใน YAML โดยตรง YAML ที่แปลงแล้วสามารถ parse กลับมาได้ข้อมูลเหมือนเดิม ความแตกต่างเพียงอย่างเดียวคือการจัดรูปแบบ: YAML ใช้การย่อหน้าแทนวงเล็บ
YAML สามารถแสดงทุกอย่างที่ JSON ทำได้หรือไม่?
ได้ YAML เป็น superset ของ JSON (ตั้งแต่ YAML 1.2) JSON document ที่ถูกต้องทุกอันเป็น YAML ที่ถูกต้องด้วย YAML มีฟีเจอร์เพิ่มเติมที่ JSON ไม่มี ได้แก่ comments, anchors/aliases, multi-line strings และประเภท scalar เพิ่มเติม เช่น dates
ทำไม Kubernetes และ Docker ถึงใช้ YAML แทน JSON?
YAML รองรับ comments ซึ่งสำคัญมากสำหรับการทำเอกสาร infrastructure configuration นอกจากนี้ยังอ่านได้ง่ายกว่าสำหรับโครงสร้างที่ซ้อนกันลึก เพราะการย่อหน้าแทนที่ความยุ่งเหยิงของวงเล็บ Kubernetes รองรับทั้ง JSON และ YAML แต่ชุมชนและเอกสารทางการทั้งหมดใช้ YAML
จะจัดการ JSON files ขนาดใหญ่อย่างไร?
ตัวแปลงนี้ทำงานในเบราว์เซอร์ของคุณ จึงรองรับไฟล์ได้ถึงหลาย megabytes โดยไม่มีปัญหา สำหรับไฟล์ขนาดใหญ่มาก (50MB ขึ้นไป) ให้ใช้ CLI tool อย่าง yq หรือ Python script กับไลบรารี PyYAML เครื่องมือเหล่านี้ประมวลผลข้อมูลแบบ stream และใช้หน่วยความจำน้อยกว่า
ตัวแปลงรักษาลำดับ key ไว้หรือไม่?
ใช่ ตัวแปลงส่งออก YAML keys ในลำดับเดียวกับที่ปรากฏใน JSON input JSON objects เป็นข้อมูลที่ไม่มีลำดับตามข้อกำหนดทางเทคนิค แต่ในทางปฏิบัติ parsers จะรักษาลำดับการแทรก และเครื่องมือนี้คงลำดับนั้นไว้ในผลลัพธ์ YAML
ผลลัพธ์เป็น YAML เวอร์ชันอะไร?
ผลลัพธ์เป็นไปตามข้อกำหนด YAML 1.2 หมายความว่าเฉพาะ true และ false เท่านั้นที่ถือเป็น boolean literals (ไม่ใช่ yes/no/on/off) Strings ที่อาจถูกตีความผิดจะถูกใส่เครื่องหมายคำพูดโดยอัตโนมัติเพื่อป้องกันความคลุมเครือในการ parse
ปลอดภัยที่จะวาง API keys และ tokens ลงในเครื่องมือนี้หรือไม่?
ปลอดภัย การแปลงทำงานในเบราว์เซอร์ของคุณด้วย JavaScript ทั้งหมด ไม่มีการส่งข้อมูลไปยังเซิร์ฟเวอร์ใด คุณสามารถตรวจสอบได้โดยเปิด network inspector ของเบราว์เซอร์และสังเกตว่าไม่มี requests เกิดขึ้นระหว่างการแปลง