🔧Toolify

แปลง JSON ↔ YAML แบบสองทิศทาง

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

tools.json-to-yaml-converter.label.json
tools.json-to-yaml-converter.label.yaml

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

ประวัติและการใช้งาน JSON และ YAML

JSON (JavaScript Object Notation) ถูกแนะนำโดย Douglas Crockford ในช่วงต้นปี 2000 ในฐานะรูปแบบการแลกเปลี่ยนข้อมูลน้ำหนักเบาที่มาจากไวยากรณ์ object literal ของ JavaScript ไวยากรณ์ที่เข้มงวด ได้แก่ เครื่องหมายคำพูดคู่ ไม่มีเครื่องหมายจุลภาคท้าย ไม่มีความคิดเห็น ทำให้ไม่คลุมเครือและแยกวิเคราะห์ได้ง่ายในทุกภาษา JSON แทนที่ XML ในเว็บ API อย่างรวดเร็วเพราะกระชับและเข้ากันได้ดีกับ JavaScript

YAML (YAML Ain't Markup Language) ถูกสร้างในปี 2001 โดย Clark Evans และ Ingy döt Net โดยมีเป้าหมายเพื่อให้เป็นมิตรกับมนุษย์มากขึ้น YAML 1.2 เป็น superset ของ JSON ในทางเทคนิค ซึ่งหมายความว่าเอกสาร JSON ที่ถูกต้องทุกฉบับถือเป็น YAML ที่ถูกต้อง แต่ YAML เพิ่มโครงสร้างแบบ indentation ความคิดเห็น string หลายบรรทัด และการอนุมานประเภท ทำให้เหมาะกับไฟล์การกำหนดค่าที่แก้ไขด้วยมือ

ควรใช้ JSON หรือ YAML เมื่อใด

JSON โดดเด่นเมื่อเครื่องจักรอ่านข้อมูล: REST API บันทึกฐานข้อมูล การสื่อสารระหว่างบริการ และ localStorage ความเรียบง่ายหมายความว่าภาษาโปรแกรมมิ่งเกือบทุกภาษามี JSON parser ในตัว และกฎไวยากรณ์ที่เข้มงวดขจัดความคลุมเครือ

YAML โดดเด่นในไฟล์การกำหนดค่าที่แก้ไขโดยมนุษย์: Docker Compose, Kubernetes manifests, GitHub Actions workflows และ Ansible playbooks ใช้ YAML เป็นค่าเริ่มต้น ความคิดเห็นช่วยให้เอกสารแบบ inline และโครงสร้างแบบ indentation ทำให้การกำหนดค่าแบบลำดับชั้นอ่านง่ายขึ้น

ข้อผิดพลาดทั่วไปในการแปลงรูปแบบ

ความไวต่อ indentation ของ YAML เป็นแหล่งข้อผิดพลาดที่พบบ่อยที่สุด ต่างจากวงเล็บปีกกาของ JSON ตรงที่ช่องว่างหนึ่งช่องที่วางผิดที่จะเปลี่ยนโครงสร้าง YAML ยังทำการอนุมานประเภทโดยอัตโนมัติด้วย ตัวอย่างเช่น yes ที่ไม่มีเครื่องหมายคำพูดจะกลายเป็น boolean true และ 0755 อาจถูกตีความเป็นเลขฐานแปด

อักขระพิเศษก็เป็นความท้าทายอีกประการหนึ่ง เครื่องหมายโคลอนตามด้วยช่องว่าง (: ) เครื่องหมายแฮช (#) และอักขระพิเศษที่จุดเริ่มต้นของ string ต้องอยู่ในเครื่องหมายคำพูดใน YAML เครื่องมือนี้จัดการกรณีเหล่านี้โดยอัตโนมัติ แต่คุณสมบัติ YAML ขั้นสูงเช่น anchors, aliases และ block scalars หลายบรรทัดไม่รองรับ

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

YAML เป็น superset ของ JSON หรือไม่?

ใช่ YAML 1.2 เป็น superset ที่เข้มงวดของ JSON ซึ่งหมายความว่าเอกสาร JSON ที่ถูกต้องทุกฉบับถือเป็น YAML ที่ถูกต้อง ในทางกลับกันไม่เป็นความจริงเสมอไป: คุณสมบัติ YAML เช่น ความคิดเห็น anchors และ block scalars ไม่มีเทียบเท่าใน JSON

YAML ใช้สำหรับอะไรเป็นหลัก?

YAML พบมากที่สุดในไฟล์การกำหนดค่า: Docker Compose, Kubernetes manifests, GitHub Actions, Ansible playbooks รูปแบบที่อ่านง่ายเหมาะกับไฟล์ที่นักพัฒนาแก้ไขด้วยตนเอง

ไฟล์การกำหนดค่าควรใช้ JSON หรือ YAML?

YAML มักชนะสำหรับการกำหนดค่าที่แก้ไขโดยมนุษย์เพราะรองรับความคิดเห็นและดูไม่รกตา JSON ดีกว่าสำหรับการกำหนดค่าที่สร้างหรือใช้โดยเครื่องจักร เครื่องมือหลายอย่าง (ESLint, Prettier, tsconfig) รองรับทั้งสองรูปแบบ

YAML จัดการอักขระพิเศษอย่างไร?

String ที่มีเครื่องหมายโคลอนตามด้วยช่องว่าง อักขระพิเศษนำหน้า ({, [, #) หรือค่าที่ดูเหมือน boolean หรือตัวเลข ต้องอยู่ในเครื่องหมายคำพูด เครื่องหมายคำพูดเดี่ยวปิดใช้งาน escape ทั้งหมด เครื่องหมายคำพูดคู่ใช้ backslash escape คล้ายกับ JSON เครื่องมือนี้เพิ่มเครื่องหมายคำพูดโดยอัตโนมัติตามต้องการ

การแปลง JSON เป็น YAML ไม่สูญเสียข้อมูลหรือไม่?

สำหรับประเภทที่ JSON รองรับ (string, ตัวเลข, boolean, null, object, array) การแปลงไม่มีการสูญเสียข้อมูล ปัญหาเดียวที่อาจเกิดขึ้นคือการอนุมานประเภทของ YAML บนค่าที่ไม่มีเครื่องหมายคำพูด

จะแปลง YAML เป็น JSON ใน Python ได้อย่างไร?

ใช้ไลบรารี PyYAML: import yaml, json; data = yaml.safe_load(open('file.yaml')); print(json.dumps(data, indent=2)) ฟังก์ชัน safe_load หลีกเลี่ยงการรัน YAML tags ที่ไม่ปลอดภัย

จะแปลง JSON เป็น YAML ใน Node.js ได้อย่างไร?

ใช้แพ็คเกจ js-yaml: const yaml = require('js-yaml'); const obj = JSON.parse(fs.readFileSync('file.json')); console.log(yaml.dump(obj)) สำหรับวิธีที่ไม่มี dependency ให้เขียน YAML serializer ด้วยตนเอง ซึ่งเป็นสิ่งที่เครื่องมือนี้ทำ

คุณสมบัติ YAML ใดที่ไม่รองรับ?

เครื่องมือนี้จงใจข้ามคุณสมบัติ YAML ขั้นสูง: anchors (&name), aliases (*name), type tags (!!int), block scalars หลายบรรทัด (| และ >), document separators (---) คุณสมบัติเหล่านี้ครอบคลุมน้อยกว่า 5% ของ YAML จริง สำหรับกรณีเหล่านั้นใช้ไลบรารี YAML ที่สมบูรณ์

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

อัปเดตล่าสุด:

ลองพรอมต์ AI ของเรา →