Pentru ce se utilizează YAML?
Un alt format de date text este YAML ( Yet Another Markup Language ; mai târziu, YAML Ain't Markup Language ). Este folosit pentru a serializa obiecte pentru transmisie prin rețea (la fel cum XML și JSON sunt folosite în acest fel). Deoarece este ușor de citit, este folosit și pentru a scrie fișiere de configurare, de exemplu, pentru Docker, Kubernetes, Ansible etc. Când YAML trebuie să fie salvat într-un fișier (de exemplu, un fișier de configurare), folosim unul dintre cele două extensii: .yaml sau .yml.
Sintaxa limbajului
În XML, parantezele unghiulare ( <> ) sunt folosite pentru a desemna etichete. În JSON, folosim paranteze ( {} ). YAML utilizează linii noi și indentări.
Datele sunt stocate ca perechi cheie-valoare, unde cheia este un șir, iar valoarea poate fi diferite tipuri de date (șir, număr, adevărat/fals, matrice etc.). Cheile sunt scrise fără ghilimele.
Să aruncăm o privire la modul în care sunt stocate informațiile în YAML:
Tip | Java | YAML |
---|---|---|
Întreg |
|
număr: 5
|
Număr fracționar |
|
număr: 4.3
|
Variabilă booleană |
|
valid: fals
valid: nu valid: off * Valori booleene valide: adevărat/fals, da/nu, activat/dezactivat. |
Şir |
|
oraș: New York
oraș: „New York” oraș: „New York” * Toate cele trei opțiuni sunt echivalente. |
Șir cu caractere speciale |
|
linia: „aaa\nbbb”
|
Comentează în cod |
|
# cometariu
|
Obiect |
* Clasa obiectului este dată astfel încât să puteți vedea structura obiectului. |
persoană:
nume: „Dennis” vârsta: 32 * Acordați atenție indentării dinaintea atributelor. Trebuie să fie același pentru toate atributele. |
Lista de valori simple |
|
varste: [1, 3,5,9,78, -5]
varste: - 1 - 3 - 5 - 9 - 78 - -5 * Ambele opțiuni sunt echivalente. |
Lista de obiecte |
|
persoane:
- nume: "Ian" varsta: 21 - nume: "Marina" varsta: 25 - nume: "Owen" varsta: 73 |
Ca și în Java, un element al unei liste poate fi o listă, adică obiectele pot fi imbricate unul în celălalt. Cratima care indică următorul element al listei poate fi decalată orizontal în raport cu cheia părinte sau situată direct sub aceasta. Principalul lucru este că toate elementele au același format. Acest lucru va ajuta la evitarea confuziei și a unei ierarhii ambigue de cuibărire.
varste:
- 1 - 3 - 5 - 9 - 78 - -5 |
varste:
- 1 - 3 - 5 - 9 - 78 - -5 |
Mai există două nuanțe atunci când lucrați cu valori de text:
-
Text cu mai multe linii. Putem salva text astfel:
multilineText: „linia 1\nlinia 2\n....linia n”Dar ar fi foarte neplăcut să încerci să citești asta. Deci există | simbol (țeavă), pe care îl puteți folosi pentru a scrie textul diferit:
multilineText: |
rândul 1
rândul 2
....
rândul nVeți fi de acord că a doua opțiune este mai convenabilă, nu?
-
Linii lungi. Dacă doriți să păstrați textul pe o singură linie, dar doriți să se încadreze și în spațiul de lucru vizibil al IDE-ului, puteți utiliza simbolul > (mai mare decât).
singlelineText: >
începe
...
continua aceeași linie
...
sfârșitTot textul va fi tratat ca o singură linie.
Dacă trebuie să scrieți mai multe structuri de date YAML într-un singur fișier, atunci trebuie să le separați cu --- (trei cratime). În practică, rareori este nevoie de acest lucru, dar cel mai bine este să fii conștient de această posibilitate.
Exemplu de document YAML
Să creăm o structură de date Java (o clasă) și un obiect corespunzător și să încercăm să reprezentăm obiectul ca YAML.
class Family {
private Date weddingDate;
private Person wife;
private Person husband;
private List<Person> children;
// Getters and setters are omitted
}
class Person {
private final String name;
private final boolean isWoman;
private int age;
public Person(String name, int age, boolean isWoman) {
this.name = name;
this.age = age;
this.isWoman = isWoman;
}
// Getters and setters are omitted
}
public static void main(String[] args) {
Person wife = new Person("Ann", 37, true);
Person husband = new Person("Alex", 40, false);
var children = List.of(
new Person("Iris", 12, true),
new Person("Olivia", 5, true)
);
Date weddingDate = new Date(/* some long */);
Family family = new Family();
family.setWeddingDate(weddingDate);
family.setWife(wife);
family.setHusband(husband);
family.setChildren(children);
}
Reprezentare validă în YAML:
nuntaData: 2000-12-03
sotie:
nume: Ann
varsta: 37
isFemeie: da
sotul:
nume: Alex
varsta: 40
isFemeie: fara
copii:
- nume: Iris
varsta: 12
isFemeie: adevarat
- nume: Olivia
varsta: 5
esteFemeie: adevărat
---
GO TO FULL VERSION