YAML อาร์เรย์หลายบรรทัด


150

ในYAMLคุณสามารถสร้างสายหลายสาย อย่างไรก็ตามฉันต้องการความสามารถในการสร้างอาร์เรย์หลายบรรทัด (ส่วนใหญ่สำหรับการอ่านได้ภายในไฟล์กำหนดค่า) โดยใช้|อักขระ

YAML อาร์เรย์['key1', 'key2', 'key3']สามารถแสดงเป็น:

ลำดับ YAML ใช้เส้นประตามด้วยช่องว่างและตามด้วยสตริง:

- String1
- String2
- String3

['string1', 'string2', 'string3']นี้จะประเมินผลการศึกษาไปที่:

การแมป YAML คืออาร์เรย์ของคู่คีย์และค่าที่เราเห็นตลอดเวลาใน YAML:

Key1: string1
Key2: string2
Key3: string3

ทั้งหมดนี้เป็นสิ่งที่ดีและดี แต่ฉันไม่สามารถเห็นวิธีทำอาร์เรย์แบบหลายบรรทัดได้ตลอดชีวิต สิ่งนี้:

|
['string1', 'string2', 'string3']
['string4', 'string5', 'string6']

ขาดการสร้างการแมปอาร์เรย์หลายรายการใน YAML และรวมเข้ากับภาษาการเขียนโปรแกรมที่ฉันเลือกมีวิธีใดบ้างในการบรรลุอาร์เรย์แบบหลายบรรทัดหรืออาจจะ{ }เหมือนกับ Python แต่ใน YAML


จริงๆแล้วอาร์เรย์แบบหลายบรรทัดคืออะไรและควรมีความหมายเมื่อใด แทนที่จะเป็นเพียงรูปลักษณ์ของรหัสของคุณ
OK999

ต้องเลื่อนหน้าจอในแนวนอนเพื่อดูตัวเลือกทั้งหมดแทนที่จะดูทั้งหมดในหน้าจอเดียว
Jimbo

คำตอบ:


266

YAML ลำดับ คืออาร์เรย์ ดังนั้นนี่คือวิธีที่ถูกต้องในการแสดงออก:

key:
  - string1
  - string2      
  - string3
  - string4
  - string5
  - string6

มีความหมายเหมือนกันกับ:

key: ['string1', 'string2', 'string3', 'string4', 'string5', 'string6']

นอกจากนี้ยังถูกกฎหมายที่จะแบ่งอาร์เรย์บรรทัดเดียวในหลายบรรทัด:

key: ['string1', 'string2', 'string3', 
  'string4', 'string5', 
  'string6']

และยังมีสตริงหลายบรรทัดในอาร์เรย์บรรทัดเดียว:

key: ['string1', 'long
  string', 'string3', 'string4', 'string5', 'string6']

1
เป็นปัญหาหรือไม่หากสตริงเริ่มต้นด้วย - (เช่นตัวเลือกที่ส่งผ่านในบรรทัดคำสั่ง) ฉันต้องอ้างหรือไม่? `-" -myarg "`?
ekkis

2
ขึ้นอยู่กับโปรแกรมที่คุณใช้ในการแยกวิเคราะห์ YAML คำถามนี้เป็นเพียงข้อมูลจำเพาะของ YAML
Steve Bennett

44

คุณเคยลองหรือยัง

-
  name: Jack
  age: 32
-
  name: Claudia
  age: 25

ฉันได้รับสิ่งนี้: [{"name"=>"Jack", "age"=>32}, {"name"=>"Claudia", "age"=>25}](ฉันใช้YAMLคลาส Ruby)


6

สิ่งต่อไปนี้จะใช้ได้:

myarray: [
  String1, String2, String3,
  String4, String5, String5, String7
]

ฉันทดสอบโดยใช้การใช้งาน snakeyaml แต่ฉันไม่แน่ใจเกี่ยวกับการใช้งานอื่น ๆ


2
มันทำงานร่วมกับ Puppet Enterprise 3.7 hiera yaml (Ruby yaml) สิ่งหนึ่งที่ฉันพบว่า Ruby yaml ค่อนข้างอ่อนไหวเช่นกันคือการระบุตัวตนและหลีกเลี่ยงการใช้แท็บ ตัวอย่างข้างต้นควรจะเป็นเช่นในสองบรรทัดระบุจำนวนช่องว่างเดียวกันโดยที่บรรทัดแรกคือmyarray: [String1, String2, String3,และบรรทัดที่สองคือ `String4, String5, String5, String7]`
Walid

2

ต่อไปนี้ใช้งานได้สำหรับฉันและมันดีจากมุมมองที่อ่านได้เมื่อค่าองค์ประกอบอาร์เรย์มีขนาดเล็ก:

key: [string1, string2, string3, string4, string5, string6]

หมายเหตุ: การใช้งาน snakeyaml ใช้


0

หากสิ่งที่คุณต้องการคืออาร์เรย์อาร์เรย์คุณสามารถทำได้ด้วยวิธีนี้:

key:
  - [ 'value11', 'value12', 'value13' ]
  - [ 'value21', 'value22', 'value23' ]

ขอบคุณ Vinicius แต่คำถามระบุไว้อย่างชัดเจน: "ฉันต้องการความสามารถในการสร้างอาร์เรย์หลายบรรทัด" ไม่ใช่หลายบรรทัดของอาร์เรย์หลายรายการ
Jimbo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.