Vad används YAML för?
Ett annat textdataformat är YAML ( Yet Another Markup Language ; senare YAML Ain't Markup Language ). Det används för att serialisera objekt för överföring över nätverket (precis som XML och JSON används på detta sätt). Eftersom den är läsbar för människor används den även för att skriva konfigurationsfiler, till exempel för Docker, Kubernetes, Ansible, etc. När YAML behöver sparas till en fil (till exempel en konfigurationsfil) använder vi en av två tillägg: .yaml eller .yml.
Språksyntax
I XML används vinkelparenteser ( <> ) för att beteckna taggar. I JSON använder vi parenteser ( {} ). YAML använder nya linjer och indrag.
Data lagras som nyckel-värdepar, där nyckeln är en sträng, och värdet kan vara olika datatyper (sträng, tal, sant/falskt, matris, etc.). Nycklar skrivs utan citattecken.
Låt oss ta en titt på hur information lagras i YAML:
Typ | Java | YAML |
---|---|---|
Heltal |
|
nummer: 5
|
Bråktal |
|
antal: 4,3
|
Boolesk variabel |
|
giltigt: falskt
giltigt: nej giltigt: av * Giltiga booleska värden: sant/falskt, ja/nej, på/av. |
Sträng |
|
stad: New York
stad: 'New York' stad: "New York" * Alla tre alternativen är likvärdiga. |
Sträng med specialtecken |
|
rad: "aaa\nbbb"
|
Kommentera i koden |
|
# kommentar
|
Objekt |
* Objektets klass anges så att du kan se objektets struktur. |
person:
namn: "Dennis" ålder: 32 * Var uppmärksam på indraget före attributen. Det måste vara samma för alla attribut. |
Lista över enkla värden |
|
åldrar: [1, 3,5,9,78, -5]
åldrar: -1 - 3 - 5 - 9 - 78 - -5 * Båda alternativen är likvärdiga. |
Lista över objekt |
|
personer:
- namn: "Ian" ålder: 21 - namn: "Marina" ålder: 25 - namn: "Owen" ålder: 73 |
Som i Java kan ett element i en lista vara en lista, det vill säga objekt kan kapslas inuti varandra. Bindestrecket som indikerar nästa element i listan kan förskjutas horisontellt i förhållande till den överordnade nyckeln, eller placeras direkt under den. Huvudsaken är att alla element har samma format. Detta kommer att hjälpa till att undvika förvirring och en tvetydig kapselhierarki.
åldrar:
- 1 - 3 - 5 - 9 - 78 - -5 |
åldrar:
- 1 - 3 - 5 - 9 - 78 - -5 |
Det finns ytterligare två nyanser när man arbetar med textvärden:
-
Flerradstext. Vi kan spara text så här:
multilineText: "rad 1\nrad 2\n....rad n"Men det skulle vara väldigt obehagligt att försöka läsa det. Så det finns | (rör) symbol, som du kan använda för att skriva texten annorlunda:
multilineText: |
rad 1
rad 2
....
rad nDu håller med om att det andra alternativet är bekvämare, eller hur?
-
Långa linjer. Om du vill behålla texten på en rad men också vill att den ska passa i IDE:ns synliga arbetsyta kan du använda symbolen > (större än).
singlelineText: >
börja
...
fortsätt på samma rad
...
slutAll text kommer att behandlas som en rad.
Om du behöver skriva flera YAML-datastrukturer till en fil, måste du separera dem med --- (tre bindestreck). I praktiken finns det sällan behov av detta, men det är bäst att vara medveten om denna möjlighet.
Exempel på ett YAML-dokument
Låt oss skapa lite Java-datastruktur (en klass) och ett motsvarande objekt och försöka representera objektet som 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);
}
Giltig representation i YAML:
bröllopDatum: 2000-12-03
fru:
namn: Ann
ålder: 37
ärKvinna: ja
man:
namn: Alex
ålder: 40
ärKvinna: inga
barn:
- namn: Iris
ålder: 12
ärKvinna: sant
- namn: Olivia
ålder: 5
isWoman: sant
---
GO TO FULL VERSION