tigtools

ตัวแปลง JSON ⇄ YAML

สลับทิศทาง วางข้อมูลของคุณและรับผลลัพธ์ที่แปลงได้ทันที เหมาะสำหรับ Kubernetes manifests, CI pipelines และไฟล์คอนฟิกของแอป

ทำงานในเบราว์เซอร์ของคุณ ไม่ต้องสมัคร

ทิศทาง
การเยื้อง

วิธีใช้งาน

  1. เลือกทิศทาง: JSON → YAML หรือ YAML → JSON
  2. วางข้อมูลของคุณหรือกด “ลองใช้ตัวอย่าง” ผลลัพธ์จะอัปเดตขณะพิมพ์
  3. เลือกการเยื้อง 2 หรือ 4 ช่องว่างสำหรับผลลัพธ์
  4. คัดลอกหรือดาวน์โหลดผลลัพธ์ “ใช้ผลลัพธ์เป็นอินพุต” จะสลับทิศทางเพื่อให้แปลงกลับได้

วิธีการทำงาน

การแปลงใช้ไลบรารี yaml โอเพนซอร์ส (เวอร์ชัน 2) ซึ่งใช้งานข้อกำหนด YAML 1.2 ในทางปฏิบัติ YAML 1.2 เป็นซูเปอร์เซ็ตของ JSON เอกสาร JSON ใด ๆ จึงแปลงเป็น YAML ได้โดยไม่สูญเสียข้อมูล และ YAML ที่ใช้เพียงแมป ลิสต์ สตริง ตัวเลข บูลีน และ null จะแปลงกลับเป็น JSON ที่เหมือนเดิม

เมื่อเขียน YAML เครื่องมือจะใส่เครื่องหมายคำพูดให้สตริงที่ผู้อ่านอาจตีความเป็นอย่างอื่น พาร์เซอร์ YAML 1.1 รุ่นเก่า เช่น PyYAML และเครื่องมือ CI จำนวนมาก อ่าน yes, no, on และ off เป็นบูลีน อ่าน 0777 เป็นเลขฐานแปด และอ่าน 2024-01-31 เป็นวันที่ ดังนั้นค่าเหล่านี้จึงเขียนเป็น "yes", "0777" และ "2024-01-31" สตริงยาวจะไม่ถูกพับเป็นหลายบรรทัด ความคิดเห็นไม่สามารถนำข้ามไปได้ เนื่องจาก JSON ไม่มีความคิดเห็น

เมื่ออ่าน YAML anchor (&name) และ alias (*name) จะถูกขยาย รวมถึง merge key << และไฟล์ที่มีหลายเอกสารคั่นด้วย --- จะกลายเป็นอาร์เรย์ JSON เพื่อปกป้องเบราว์เซอร์ของคุณ การขยาย alias จะถูกจำกัด ซึ่งช่วยหยุดเอกสารแบบ “billion laughs” ค่า YAML ที่ไม่มีค่าเทียบเท่าใน JSON จะถูกแปลงให้ใกล้เคียงที่สุด: .inf และ .nan กลายเป็น null และ timestamp คงเป็นสตริง ข้อผิดพลาดทางไวยากรณ์จะรายงานพร้อมหมายเลขบรรทัดและคอลัมน์

ตัวอย่าง

Manifest ของ Kubernetes

Deployment ที่เขียนเป็น JSON ด้วยสคริปต์จะแปลงเป็นโครงสร้าง YAML ตามที่ผู้ใช้ kubectl คุ้นเคย โดยลิสต์ภายใต้ containers เขียนเป็น - name: web ค่าเช่น "no" ยังคงอยู่ในเครื่องหมายคำพูดเพื่อให้เป็นสตริง

คอนฟิก CI พร้อม anchor

ไฟล์ pipeline กำหนดค่าเริ่มต้นด้วย &defaults และนำกลับมาใช้ซ้ำด้วย <<: *defaults การแปลงเป็น JSON จะแสดงชัดเจนว่าแต่ละ job ได้คีย์ใดบ้างหลังการ merge

ข้อกำหนด OpenAPI

ไฟล์ OpenAPI ถูกดูแลในรูปแบบ YAML แต่ตัวสร้างโค้ดต้องการ JSON วาง YAML เลือกการเยื้อง 2 ช่องว่าง แล้วดาวน์โหลดไฟล์ .json

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

ทำไม "yes" จึงอยู่ในเครื่องหมายคำพูดใน YAML ของฉัน

ตามกฎ YAML 1.1 ที่ PyYAML, Ansible และเครื่องมืออื่นอีกมากยังใช้อยู่ yes, no, on หรือ off ที่ไม่มีเครื่องหมายคำพูดจะเป็นบูลีน การใส่เครื่องหมายคำพูดช่วยให้ค่าเป็นสตริงในทุกพาร์เซอร์ เครื่องหมายคำพูดไม่ได้เป็นส่วนหนึ่งของค่า

ความคิดเห็นใน YAML ถูกเก็บไว้เมื่อแปลงเป็น JSON หรือไม่

ไม่ เพราะ JSON ไม่มีไวยากรณ์สำหรับความคิดเห็น ความคิดเห็นจึงถูกตัดทิ้ง การแปลง JSON กลับเป็น YAML จะไม่กู้คืนความคิดเห็นเหล่านั้น

จะเกิดอะไรขึ้นเมื่อมีเอกสาร YAML หลายเอกสารคั่นด้วย ---

เอกสารเหล่านั้นจะถูกแปลงเป็นอาร์เรย์ JSON หนึ่งชุด โดยมีหนึ่งสมาชิกต่อหนึ่งเอกสารตามลำดับ เอกสารเดียวจะแปลงเป็นค่าของเอกสารนั้นโดยตรง

แล้วแท็กแบบกำหนดเองเช่น !Ref ของ CloudFormation ล่ะ

เครื่องมือไม่เข้าใจแท็กเฉพาะแอปพลิเคชัน จะแสดงคำเตือนและแปลงค่าที่ติดแท็กเป็นค่าธรรมดา เช่น !Ref MyBucket จะกลายเป็นสตริง "MyBucket" และตัวแท็กจะหายไป

ความเป็นส่วนตัว

ทั้งสองทิศทางทำงานในเบราว์เซอร์ของคุณเท่านั้น JSON หรือ YAML ของคุณจะไม่ถูกอัปโหลด จัดเก็บ หรือรวมอยู่ในการวิเคราะห์