Hva brukes YAML til?
Et annet tekstdataformat er YAML ( Yet Another Markup Language ; senere YAML Ain't Markup Language ). Den brukes til å serialisere objekter for overføring over nettverket (akkurat som XML og JSON brukes på denne måten). Fordi den er lesbar for mennesker, brukes den også til å skrive konfigurasjonsfiler, for eksempel for Docker, Kubernetes, Ansible, etc. Når YAML må lagres i en fil (for eksempel en konfigurasjonsfil), bruker vi en av to utvidelser: .yaml eller .yml.
Språksyntaks
I XML brukes vinkelparenteser ( <> ) for å angi tagger. I JSON bruker vi krøllede parenteser ( {} ). YAML bruker nye linjer og innrykk.
Dataene lagres som nøkkel-verdi-par, hvor nøkkelen er en streng, og verdien kan være ulike datatyper (streng, tall, sant/falsk, matrise, etc.). Nøkler er skrevet uten anførselstegn.
La oss ta en titt på hvordan informasjon lagres i YAML:
Type | Java | YAML |
---|---|---|
Heltall |
|
nummer: 5
|
Brøktal |
|
tall: 4,3
|
Boolsk variabel |
|
gyldig: usant
gyldig: nei gyldig: av * Gyldige boolske verdier: sann/falsk, ja/nei, på/av. |
String |
|
by: New York
by: 'New York' by: "New York" * Alle tre alternativene er likeverdige. |
String med spesialtegn |
|
linje: "aaa\nbbb"
|
Kommenter i kode |
|
# kommentar
|
Gjenstand |
* Objektets klasse er gitt slik at du kan se strukturen til objektet. |
person:
navn: "Dennis" alder: 32 * Vær oppmerksom på innrykk før attributtene. Det må være likt for alle attributter. |
Liste over enkle verdier |
|
aldre: [1, 3,5,9,78, -5]
aldre: - 1 - 3 - 5 - 9 - 78 - -5 * Begge alternativene er likeverdige. |
Liste over objekter |
|
personer:
- navn: "Ian" alder: 21 - navn: "Marina" alder: 25 - navn: "Owen" alder: 73 |
Som i Java kan et element i en liste være en liste, det vil si at objekter kan nestes inne i hverandre. Bindestreken som indikerer det neste elementet i listen kan forskyves horisontalt i forhold til overordnet nøkkel, eller plassert rett under den. Hovedsaken er at alle elementene har samme format. Dette vil bidra til å unngå forvirring og et tvetydig hekkehierarki.
aldre:
- 1 - 3 - 5 - 9 - 78 - -5 |
aldre:
- 1 - 3 - 5 - 9 - 78 - -5 |
Det er to nyanser til når du arbeider med tekstverdier:
-
Flerlinjetekst. Vi kan lagre tekst slik:
multilineText: "linje 1\nlinje 2\n....linje n"Men det ville vært veldig ubehagelig å prøve å lese det. Så det er | (pipe) symbol, som du kan bruke til å skrive teksten annerledes:
multilineTekst: |
linje 1
linje 2
....
linje nDu er enig i at det andre alternativet er mer praktisk, ikke sant?
-
Lange linjer. Hvis du vil beholde teksten på én linje, men også vil at den skal passe inn i IDEs synlige arbeidsområde, kan du bruke > (større enn)-symbolet.
singlelineText: >
begynne
...
fortsett samme linje
...
sluttAll tekst vil bli behandlet som én linje.
Hvis du trenger å skrive flere YAML-datastrukturer i én fil, må du skille dem med --- (tre bindestreker). I praksis er det sjelden behov for dette, men det er best å være klar over denne muligheten.
Eksempel på et YAML-dokument
La oss lage en Java-datastruktur (en klasse) og et tilsvarende objekt, og prøve å representere 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);
}
Gyldig representasjon i YAML:
bryllup Dato: 2000-12-03
kone:
navn: Ann
alder: 37
er Kvinne: ja
mann:
navn: Alex
alder: 40
er Kvinne: ingen
barn:
- navn: Iris
alder: 12
er Kvinne: sant
- navn: Olivia
alder: 5
isWoman: sant
---
GO TO FULL VERSION