UltKit
รูปภาพ11
PDF13
เอกสารและข้อมูล7
วิดีโอ6
เสียง4
เครื่องมืออื่น ๆ22

แปลง JSON เป็น YAML

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

แปลงไฟล์ข้อมูล

หรือลากไฟล์ CSV, TSV, TXT … มาวางที่นี่ ·

สูงสุด 95 MB ต่อไฟล์· ได้สูงสุด 20 ไฟล์· ลบหลังจาก 30 นาที

ผลลัพธ์

ไฟล์จะถูกประมวลผลบนเซิร์ฟเวอร์ของเราและถูกลบหลังจาก 30 นาที

วิธีใช้เครื่องมือนี้

  1. 1

    เพิ่มไฟล์ JSON

    อัปโหลดการตอบกลับของ API, การตั้งค่าที่ส่งออก หรือไฟล์ manifest ที่สร้างขึ้นเป็นไฟล์ .json ได้สูงสุด 20 ไฟล์ ไฟล์ละไม่เกิน 95 MB แต่ละไฟล์ต้องมีค่า JSON ที่ถูกต้องเพียงหนึ่งค่า

  2. 2

    ใช้ค่าเริ่มต้นตามเดิม

    YAML ถูกเลือกไว้แล้วภายใต้ แปลงเป็น สำหรับไฟล์คอนฟิกไม่ต้องเปลี่ยนอะไรเพิ่ม ผลลัพธ์ใช้การเยื้องสองช่องว่าง

  3. 3

    แปลงแล้วคอมมิต

    กด แปลงเป็น YAML ดาวน์โหลดไฟล์ .yaml เพิ่มคอมเมนต์ในจุดที่ผู้อ่านคนถัดไปต้องใช้ แล้วคอมมิต

คำตอบ

แปลง JSON เป็น YAML ได้อย่างไร

อัปโหลดไฟล์ .json แล้วกด แปลงเป็น YAML ออบเจ็กต์จะกลายเป็นบล็อก key: value ที่เยื้องเข้าไป อาร์เรย์จะเป็นรายการที่ขึ้นต้นด้วยขีดกลาง และสตริงที่ YAML อาจอ่านผิดจะคงเครื่องหมายอัญประกาศไว้

ทำไมจึงควรแปลง JSON เป็น YAML สำหรับไฟล์คอนฟิก

JSON ส่วนใหญ่สร้างโดยซอฟต์แวร์ เช่น การตอบกลับของ API การส่งออกการตั้งค่า หรือผลลัพธ์ของตัวสร้าง ส่วน YAML ส่วนใหญ่ดูแลโดยคน การแปลงมักเป็นจุดที่ข้อมูลเลิกเป็นผลลัพธ์ของเครื่องและกลายเป็นสิ่งที่ทีมเป็นเจ้าของ เช่น deployment manifest ที่เก็บใน Git, CI pipeline หรือชุดตัวแปรของ Ansible

กรณีทั่วไป: คุณเรียก API ของคลาวด์ ได้คำอธิบายทรัพยากรเป็น JSON ยาว 200 บรรทัด และต้องการเก็บเป็นโค้ดโครงสร้างพื้นฐาน การแปลงจะได้ไฟล์ที่ไม่มีวงเล็บปีกกาและเครื่องหมายจุลภาค แก้หนึ่งบรรทัดก็เกิด diff หนึ่งบรรทัด และอธิบายค่าที่แปลกด้วยคอมเมนต์ได้ เช่นเดียวกับ test fixture และไฟล์แปลภาษาที่คนที่ไม่ใช่นักพัฒนาแก้ไข หากต้องการตารางแบบแบนสำหรับสเปรดชีตหรือรายงาน แปลง JSON เป็น CSV เหมาะกว่า

เครื่องมือที่ใช้ไฟล์คอนฟิกแบบ YAML

YAML ที่แปลงแล้วมักนำไปใช้ที่ใด
หน่วยงานข้อกำหนดแหล่งที่มา
GitHub Actionsเวิร์กโฟลว์อยู่ใน .github/workflows เป็นไฟล์ .yml หรือ .yamlGitHub Docs
GitLab CI/CDกำหนดไปป์ไลน์ใน .gitlab-ci.yml ที่รากของที่เก็บGitLab Docs
Docker Composeอธิบายเซอร์วิสใน compose.yaml (เดิมคือ docker-compose.yml)Docker Docs
AnsiblePlaybook และไฟล์ตัวแปรเขียนด้วย YAMLAnsible Docs
KubernetesManifest รับได้ทั้ง JSON หรือ YAML ส่วนเอกสารและ Helm chart ใช้ YAMLKubernetes

ตัวอย่างการแปลง JSON เป็น YAML ที่มีค่าซับซ้อน

ผลลัพธ์ YAML ของ {"name":"api","version":"1.10","debug":false,"tags":["web","eu"],"country":"NO"}
name: api
version: "1.10"
debug: false
tags:
  - web
  - eu
country: "NO"  # นอร์เวย์ ต้องใส่เครื่องหมายคำพูด ไม่เช่นนั้น YAML 1.1 จะอ่านเป็น false

สิ่งที่ YAML มอบให้

  • ใส่คอมเมนต์ด้วย #
  • diff สั้นลงในการรีวิวโค้ด
  • ส่วนใหญ่ไม่มีวงเล็บปีกกา เครื่องหมายจุลภาค หรืออัญประกาศ
  • ข้อความหลายบรรทัดด้วย block scalar แบบ |

สิ่งที่ควรระวัง

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

ตัวอย่างนี้แสดงว่าทำไมการค้นหาและแทนที่วงเล็บปีกกาธรรมดาจึงไม่พอ เวอร์ชัน 1.10 เป็นสตริงใน JSON หากเขียนเปล่า ๆ ใน YAML จะถูกอ่านเป็นตัวเลข 1.1 ส่วน NO ซึ่งเป็นรหัส ISO ของนอร์เวย์ จะถูกตัวแยกวิเคราะห์ YAML 1.1 เช่น PyYAML อ่านเป็น false ทั้งสองค่าจึงคงอัญประกาศไว้ ขณะที่ตัวเลขและบูลีนจริงไม่มีอัญประกาศ

เปรียบเทียบ JSON กับ YAML

JSON

JavaScript Object Notation

JSON คือรูปแบบข้อความขนาดเบาสำหรับข้อมูลเชิงโครงสร้าง ได้รับความนิยมจาก Douglas Crockford ในช่วงต้นทศวรรษ 2000 และกำหนดเป็นมาตรฐาน RFC 8259 และ ECMA-404 แสดงอ็อบเจกต์ อาร์เรย์ สตริง ตัวเลข ค่าบูลีน และ null ด้วยไวยากรณ์ที่เรียบง่ายและอ่านง่าย เป็นรูปแบบเริ่มต้นของ API บนเว็บ ไฟล์การตั้งค่า และการแลกเปลี่ยนข้อมูลระหว่างแอปในแทบทุกภาษาโปรแกรม ไม่มีคอมเมนต์ วันที่ หรือสคีมาในตัว และไฟล์ขนาดใหญ่ที่ซ้อนกันหลายชั้นอ่านได้ยากหากไม่มีโปรแกรมดู

การบีบอัด
–
พื้นหลังโปร่งใส
–
ภาพเคลื่อนไหว
–
เปิดตัว
2001 · Douglas Crockford
ตัวแปลงไฟล์ JSON

YAML

YAML

YAML (“YAML Ain't Markup Language”) เป็นรูปแบบข้อมูลที่มนุษย์อ่านง่าย เปิดตัวครั้งแรกในปี 2001 ใช้การย่อหน้าแทนวงเล็บ รองรับคอมเมนต์ และเป็นซูเปอร์เซตของ JSON นิยมใช้อย่างแพร่หลายสำหรับการตั้งค่าใน Docker Compose, Kubernetes, GitHub Actions และแอปพลิเคชันจำนวนมาก การพึ่งพาช่องว่างทำให้ไฟล์เสียได้ง่ายเพียงเพราะเว้นวรรคผิดที่เดียว และค่าบางอย่าง เช่น “no” หรือวันที่ อาจถูกตีความผิดไปจากที่คาดไว้

การบีบอัด
–
พื้นหลังโปร่งใส
–
ภาพเคลื่อนไหว
–
เปิดตัว
2001 · Clark Evans, Ingy döt Net, Oren Ben-Kiki
ตัวแปลงไฟล์ YAML

ผู้คนแปลง JSON เป็น YAML เมื่อข้อมูลที่สร้างขึ้นหรือมาจาก API ต้องกลายเป็นไฟล์คอนฟิกที่คนดูแล รีวิวใน pull request และใส่คอมเมนต์ประกอบได้

คำถามเกี่ยวกับการแปลง JSON เป็น YAML

JSON ถือเป็น YAML ที่ถูกต้องอยู่แล้วหรือไม่

ใน YAML 1.2 ใช่ ฉบับปี 2009 ถูกเขียนขึ้นให้เอกสาร JSON ทุกชิ้นเป็นเอกสาร YAML ด้วย คุณวาง JSON ลงในไฟล์ .yaml ได้และเครื่องมือส่วนใหญ่จะรับได้ การแปลงช่วยเรื่องความอ่านง่าย คือรูปแบบบล็อกที่ไม่มีวงเล็บปีกกา เครื่องหมายอัญประกาศ และเครื่องหมายจุลภาค ซึ่งเป็นสิ่งที่ผู้รีวิวและผู้ดูแลคนถัดไปคาดหวัง

ทำไมค่าบางค่าใน YAML จึงมีเครื่องหมายคำพูดครอบ

เพราะถ้าไม่มีเครื่องหมายอัญประกาศ YAML จะอ่านเป็นชนิดข้อมูลอื่น สตริงเวอร์ชันอย่าง 1.10 จะกลายเป็นตัวเลข 1.1 และ yes หรือ off อาจกลายเป็นค่าบูลีนในตัวแยกวิเคราะห์รุ่นเก่า สตริงที่หน้าตาเหมือนตัวเลข วันที่ หรือบูลีนต้องมีเครื่องหมายอัญประกาศเพื่อคงเป็นสตริง การแปลงอย่างระมัดระวังจึงเก็บไว้

เพิ่มคอมเมนต์หลังแปลงได้หรือไม่

ได้ และเป็นเหตุผลที่พบบ่อยในการแปลง เขียน # ตามด้วยบันทึกของคุณท้ายบรรทัดหรือในบรรทัดของตัวเอง JSON ไม่มีวิธีอธิบายว่าทำไมจึงตั้งค่าหนึ่ง ๆ แต่ YAML ทำได้ ทำให้การรีวิวและการส่งมอบงานง่ายขึ้น

ทำไม YAML จึงแจ้งข้อผิดพลาดเรื่องอักขระแท็บ

ข้อกำหนดของ YAML ห้ามใช้แท็บในการเยื้อง ใช้ได้เฉพาะช่องว่าง ตัวแปลงเขียนเป็นช่องว่าง แต่ตัวแก้ไขที่ตั้งให้แทรกแท็บอาจทำให้ไฟล์เสียเมื่อแก้ไขครั้งถัดไป ให้ตั้งตัวแก้ไขใช้ช่องว่างสำหรับไฟล์ .yaml

Kubernetes จะยอมรับไฟล์ manifest ที่แปลงแล้วหรือไม่

kubectl อ่านได้ทั้ง JSON และ YAML ข้อมูลจึงเหมือนกันทั้งสองแบบ เวอร์ชัน YAML เป็นแบบที่เอกสารส่วนใหญ่ Helm chart และการรีวิวโค้ดใช้ หากภายหลังต้องการ JSON กลับมาสำหรับ jq หรือการเรียก API ให้ใช้ แปลง YAML เป็น JSON เพื่อย้อนกลับ