YAML - รูปแบบการไหล

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

  • โหนดนามแฝง
  • โหนดว่าง
  • รูปแบบ Flow Scalar
  • รูปแบบการรวบรวมกระแส
  • โหนดการไหล

ตัวอย่างของโหนดนามแฝงแสดงไว้ด้านล่าง -

%YAML 1.2
---
!!map {
   ? !!str "First occurrence"
   : &A !!str "Foo",
   ? !!str "Override anchor"
   : &B !!str "Bar",
   ? !!str "Second occurrence"
   : *A,
   ? !!str "Reuse anchor"
   : *B,
}

เอาต์พุต JSON ของโค้ดที่ระบุด้านบนแสดงไว้ด้านล่าง -

{
   "First occurrence": "Foo", 
   "Second occurrence": "Foo", 
   "Override anchor": "Bar", 
   "Reuse anchor": "Bar"
}

โหนดที่มีเนื้อหาว่างถือเป็นโหนดว่าง ตัวอย่างต่อไปนี้แสดงสิ่งนี้ -

%YAML 1.2
---
!!map {
   ? !!str "foo" : !!str "",
   ? !!str "" : !!str "bar",
}

ผลลัพธ์ของโหนดว่างใน JSON แสดงดังต่อไปนี้ -

{
   "": "bar", 
   "foo": ""
}

รูปแบบสเกลาร์ของโฟลว์ ได้แก่ ประเภทที่ยกมาสองครั้งแบบยกเดียวและแบบธรรมดา ตัวอย่างพื้นฐานสำหรับสิ่งเดียวกันได้รับด้านล่าง -

%YAML 1.2
---
!!map {
   ? !!str "implicit block key"
   : !!seq [
      !!map {
         ? !!str "implicit flow key"
         : !!str "value",
      }
   ]  
}

ผลลัพธ์ในรูปแบบ JSON สำหรับตัวอย่างที่ระบุข้างต้นแสดงไว้ด้านล่าง -

{
   "implicit block key": [
      {
         "implicit flow key": "value"
      }
   ] 
}

คอลเลกชันโฟลว์ใน YAML ซ้อนกับบล็อกคอลเลกชันภายในคอลเลกชันโฟลว์อื่น รายการคอลเลกชันโฟลว์ถูกยกเลิกด้วยcomma (,) ตัวบ่งชี้ ตัวอย่างต่อไปนี้อธิบายบล็อกการรวบรวมโฟลว์โดยละเอียด -

%YAML 1.2
---
!!seq [
   !!seq [
      !!str "one",
      !!str "two",
   ],
   
   !!seq [
      !!str "three",
      !!str "four",
   ],
]

เอาต์พุตสำหรับการรวบรวมโฟลว์ใน JSON แสดงไว้ด้านล่าง -

[
   [
      "one", 
      "two"
   ], 
   [
      "three", 
      "four"
   ]
]

รูปแบบโฟลว์เช่น JSON มีตัวบ่งชี้เริ่มต้นและสิ้นสุด รูปแบบการไหลเดียวที่ไม่มีคุณสมบัติคือสเกลาร์ธรรมดา

%YAML 1.2
---
!!seq [
!!seq [ !!str "a", !!str "b" ],
!!map { ? !!str "a" : !!str "b" },
!!str "a",
!!str "b",
!!str "c",]

ผลลัพธ์สำหรับโค้ดที่แสดงด้านบนในรูปแบบ JSON ได้รับด้านล่าง -

[
   [
      "a", 
      "b"
   ], 
   
   {
      "a": "b"
   }, 
   
   "a", 
   "b", 
   "c"
]