A cosa serve YAML?
Un altro formato di dati di testo è YAML ( Yet Another Markup Language ; in seguito, YAML Ain't Markup Language ). Viene utilizzato per serializzare oggetti per la trasmissione sulla rete (proprio come XML e JSON vengono utilizzati in questo modo). Poiché è leggibile dall'uomo, viene utilizzato anche per scrivere file di configurazione, ad esempio per Docker, Kubernetes, Ansible, ecc. Quando YAML deve essere salvato in un file (ad esempio, un file di configurazione), utilizziamo uno dei due estensioni: .yaml o .yml.
Sintassi del linguaggio
In XML, le parentesi angolari ( <> ) vengono utilizzate per designare i tag. In JSON, utilizziamo le parentesi graffe ( {} ). YAML utilizza nuove righe e indentazione.
I dati vengono archiviati come coppie chiave-valore, dove la chiave è una stringa e il valore può essere di vari tipi di dati (stringa, numero, vero/falso, matrice e così via). Le chiavi sono scritte senza virgolette.
Diamo un'occhiata a come le informazioni vengono archiviate in YAML:
Tipo | Giava | YAML |
---|---|---|
Numero intero |
|
numero: 5
|
Numero frazionario |
|
numero: 4.3
|
Variabile booleana |
|
valido: falso
valido: no valido: off * Valori booleani validi: vero/falso, sì/no, on/off. |
Corda |
|
città: New York
città: 'New York' città: "New York" * Tutte e tre le opzioni sono equivalenti. |
Stringa con caratteri speciali |
|
riga: "aaa\nbbb"
|
Commento in codice |
|
# commento
|
Oggetto | * La classe dell'oggetto è data in modo da poter vedere la struttura dell'oggetto. |
persona:
nome: "Dennis" età: 32 * Prestare attenzione al rientro prima degli attributi. Deve essere uguale per tutti gli attributi. |
Elenco di valori semplici |
|
età: [1, 3,5,9,78, -5]
età: - 1 - 3 - 5 - 9 - 78 - -5 * Entrambe le opzioni sono equivalenti. |
Elenco degli oggetti |
|
persone:
- nome: "Ian" età: 21 - nome: "Marina" età: 25 - nome: "Owen" età: 73 |
Come in Java, un elemento di una lista può essere una lista, cioè gli oggetti possono essere annidati l'uno dentro l'altro. Il trattino che indica l'elemento successivo dell'elenco può essere sfalsato orizzontalmente rispetto alla chiave principale o posizionato direttamente sotto di essa. La cosa principale è che tutti gli elementi hanno lo stesso formato. Ciò contribuirà a evitare confusione e una gerarchia di nidificazione ambigua.
età:
- 1 - 3 - 5 - 9 - 78 - -5 |
età:
- 1 - 3 - 5 - 9 - 78 - -5 |
Ci sono altre due sfumature quando si lavora con i valori di testo:
-
Testo multilinea. Possiamo salvare il testo in questo modo:
multilineText: "riga 1\nriga 2\n....riga n"Ma sarebbe molto spiacevole provare a leggerlo. Quindi c'è il | simbolo (pipa), che puoi utilizzare per scrivere il testo in modo diverso:
testo multilinea: |
linea 1
linea 2
....
linea nSarai d'accordo che la seconda opzione è più conveniente, giusto?
-
Linee lunghe. Se vuoi mantenere il testo su una riga ma vuoi anche che rientri nell'area di lavoro visibile dell'IDE, puoi usare il simbolo > (maggiore di).
singlelineText: >
inizio
...
continua stessa riga
...
fineTutto il testo verrà trattato come una riga.
Se devi scrivere diverse strutture di dati YAML in un file, devi separarle con --- (tre trattini). In pratica, raramente ce n'è bisogno, ma è meglio essere consapevoli di questa possibilità.
Esempio di un documento YAML
Creiamo una struttura dati Java (una classe) e un oggetto corrispondente e proviamo a rappresentare l'oggetto come 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);
}
Rappresentazione valida in YAML:
weddingDate: 2000-12-03
moglie:
nome: Ann
età: 37
isDonna: si
marito:
nome: Alex
età: 40
isDonna: no
figli:
- nome: Iris
età: 12
isDonna: true
- nome: Olivia
età: 5
isDonna: vero
---
GO TO FULL VERSION