ตัวแปลง YAML เป็น JSON

วาง YAML (Kubernetes manifest, Docker Compose, config ของ CI) แล้วรับ JSON ที่สะอาดทันที ข้อผิดพลาดแสดงบรรทัดที่แน่นอนพร้อมตัวชี้

ทำงานในเบราว์เซอร์ไม่ต้องสมัครไม่มีการอัปโหลด

ผลลัพธ์ JSON

วิธีใช้ YAML เป็น JSON

  1. วาง YAML ลงในช่องซ้าย หรือเปิดไฟล์ .yaml/.yml
  2. JSON จะแสดงทางขวาทันทีที่คุณพิมพ์ เลือก 2 ช่องว่าง 4 ช่องว่าง หรือแท็บสำหรับผลลัพธ์
  3. ติ๊ก เรียงคีย์ เพื่อเรียงคีย์ตามตัวอักษร ช่วยได้เมื่อเปรียบเทียบ config
  4. หาก YAML ไม่ถูกต้อง แถบสถานะจะแสดงบรรทัดและคอลัมน์ และบรรทัดที่มีปัญหาจะแสดงด้านล่างพร้อมเครื่องหมาย ^
  5. คัดลอกหรือดาวน์โหลด JSON หรือกด สลับ เพื่อแปลงกลับเป็น YAML

YAML แมปเป็น JSON อย่างไร

JSON เป็นสับเซตของ YAML 1.2 ดังนั้น mapping ของ YAML ทุกตัวจะกลายเป็น JSON object ทุก sequence กลายเป็น array และ scalar กลายเป็นสตริง ตัวเลข boolean หรือ null ฟีเจอร์ที่มีเฉพาะใน YAML จะถูกแปลงระหว่างการแปลง:

  • คอมเมนต์ (# …) ถูกตัดออก เพราะ JSON ไม่มีคอมเมนต์
  • Anchor และ alias (&base, *base, <<: *base) ถูกขยายเป็นสำเนาเต็ม
  • Timestamp เช่น 2024-01-02 กลายเป็นสตริง ISO 8601
  • สตริงหลายบรรทัด (บล็อก literal | และบล็อก folded >) กลายเป็นสตริงธรรมดาที่มี escape \n

YAML หลายเอกสาร

ไฟล์เดียวมีเอกสาร YAML ได้หลายชุดคั่นด้วย --- ซึ่งพบบ่อยใน Kubernetes manifest JSON ไม่มีสิ่งเทียบเท่า ตัวแปลงจึงส่งคืน JSON array ที่มีหนึ่งสมาชิกต่อหนึ่งเอกสาร และแจ้งในแถบสถานะ --- ตัวเดียวที่อยู่ท้ายไฟล์จะถูกข้าม

ข้อควรระวังระหว่าง YAML 1.1 กับ 1.2

ตัวแปลงนี้ทำตาม YAML 1.2 ซึ่งเป็นสเปกปัจจุบัน เครื่องมือเก่าหลายตัว (PyYAML, Psych ของ Ruby, Kubernetes และ Ansible บางเวอร์ชัน) ยังอ่านแบบ YAML 1.1 ซึ่งมีกฎต่างกัน:

  • ปัญหานอร์เวย์: ใน YAML 1.1 country: no หมายถึง false รหัสประเทศของนอร์เวย์ NO จึงหายไป เช่นเดียวกับ yes, on, off, y และ n ส่วน YAML 1.2 ถือว่าเฉพาะ true และ false เป็น boolean
  • เลขฐานแปด: 0755 เป็นเลขฐานแปดใน 1.1 แต่เป็นเลขฐานสิบธรรมดาใน 1.2 ซึ่งใช้ 0o755 ควรใส่อัญประกาศให้ file mode เพื่อความปลอดภัย
  • เลขฐานหกสิบ: ใน 1.1 22:30 อาจถูกพาร์สเป็นตัวเลข 1350 ควรใส่อัญประกาศให้เวลาและการแมป port เช่น "8080:80"

ทิศทาง JSON → YAML จะใส่อัญประกาศให้สตริงที่กำกวม ('no', 'on', 'y') อัตโนมัติ YAML ที่สร้างขึ้นจึงอ่านได้เหมือนกันทั้งสองเวอร์ชัน

คำถามที่พบบ่อย

YAML ของฉันถูกอัปโหลดไปที่ใดหรือไม่?
ไม่ การพาร์สเกิดขึ้นในเบราว์เซอร์ของคุณด้วยไลบรารีโอเพนซอร์ส js-yaml config ที่มี secret หรือ hostname ภายในไม่เคยออกจากเครื่องของคุณ
ทำไม YAML ของฉันผิดพลาดด้วย “bad indentation”?
การซ้อนใน YAML กำหนดด้วยช่องว่าง และไม่อนุญาตให้ใช้แท็บในการเยื้อง ตรวจสอบว่าคีย์ระดับเดียวกันอยู่ตรงกันพอดี และรายการ (-) เยื้องอย่างสม่ำเสมอใต้คีย์แม่
คอมเมนต์ของ YAML จะเป็นอย่างไร?
ถูกลบออก JSON ไม่มีไวยากรณ์คอมเมนต์ จึงนำคอมเมนต์ไปด้วยไม่ได้ การแปลงกลับเป็น YAML จะไม่คืนคอมเมนต์เหล่านั้น
ทำไม <code>no</code> ยังคงเป็นสตริง?
เครื่องมือนี้ทำตาม YAML 1.2 ซึ่งมีเพียง true/false ที่เป็น boolean parser YAML 1.1 รุ่นเก่าจะเปลี่ยน no, yes, on และ off เป็น boolean (“ปัญหานอร์เวย์”)
แปลง Kubernetes manifest ที่มีหลาย resource ได้ไหม?
ได้ แต่ละ resource ที่คั่นด้วย --- จะกลายเป็นหนึ่งสมาชิกของ JSON array ผลลัพธ์ พร้อมใช้กับ jq หรือ kubectl apply -f - ซึ่งรับรายการ JSON ได้เช่นกัน

เครื่องมือที่เกี่ยวข้อง