Manipuler du YAML

YAML (YAML Ain't Markup Language) est un langage de sérialisation de données, similaire à JSON ou XML ; voir https://yaml.org/.
YAML peut être vu comme une extension de json : tout document json valide est un document yaml valide (le contraire n'est pas vrai).

Un des intérêts de yaml est de supporter 2 modes : un mode "inline", comme json et un mode "multiligne" utilisant les tabulations pour exprimer la structure des objets, ce qui permet d'écrire des fichiers de configuration sans caractères tels que [ ] { } " ,.

Exemple d'un tableau contenant 2 maps en json :
[
    {
        "nom": "Curry",
        "pr\u00e9nom": "Haskell Brooks",
        "naissance": {
            "date": "1900-12-09",
            "lieu": "Millis",
            "admin-code-level1": "Massachusetts",
            "pays": "US"
        },
        "mort": {
            "date": "1982-12-01",
            "lieu": "State College",
            "admin-code-level1": "Pennsylvania",
            "pays": "US"
        }
    },
    {
        "nom": "Howard",
        "pr\u00e9nom": "William Alvin",
        "naissance": {
            "date": "1926",
            "pays": "US"
        }
    }
]
Le même tableau écrit en yaml, mode multiline :
-
  nom: Curry
  "pr\xE9nom": Haskell Brooks
  naissance:
    date: "1900-12-09"
    lieu: Millis
    admin-code-level1: Massachusetts
    pays: US
  mort:
    date: "1982-12-01"
    lieu: State College
    admin-code-level1: Pennsylvania
    pays: US
- 
  nom: Howard
  "pr\xE9nom": William Alvin
  naissance:
    date: "1926"
    pays: US
Note : on peut mélanger les 2 syntaxes, par exemple écrire :
- 
  nom: Howard
  "pr\xE9nom": William Alvin
  naissance: {date: "1926", pays: US}

Tester l'utilisation de YAML

Créez un répertoire de test et allez dedans :
mkdir test-yaml
cd test-yaml
Créez un fichier test.yml contenant le yaml d'exemple.

YAML en java

L'API java ne fournit pas de classes pour gérer le yaml. Il faut donc utiliser une bibliothèque ; il en existe plusieurs, par exemple SnakeYAML, eo-yaml, YamlBeans.

On va utiliser YamlBeans.

Installation

Téléchargez sur votre machine locale le jar contenant le code de YamlBeans, à partir de https://repo1.maven.org/maven2/com/esotericsoftware/yamlbeans/yamlbeans.
wget https://repo1.maven.org/maven2/com/esotericsoftware/yamlbeans/yamlbeans/1.15/yamlbeans-1.15.jar
Créez un fichier YamlTest.java
import java.util.*;
import java.io.*;
import com.esotericsoftware.yamlbeans.*;

class YamlTest{

    public static void main(String[] args){
        try{
            YamlReader reader = new YamlReader(new FileReader("test.yml"));
            List theList = (ArrayList)reader.read();
            System.out.println(theList);
        }
        catch(Exception e){
            System.out.println(e.getMessage());
            e.printStackTrace();
            System.exit(0);
        }
    }
}
Compilez :
javac -cp yamlbeans-1.15.jar YamlTest.java 
Exécutez :
java -cp yamlbeans-1.15.jar:. YamlTest
Attention, java étant un langage typé, il faut associer à chaque noeud un type java.

Note : A la place de télécharger un fichier jar, on aurait pu cloner le code source et l'utiliser pour compiler et exécuter :
git clone https://github.com/EsotericSoftware/yamlbeans.git
javac -cp yamlbeans/src YamlTest.java
java -cp yamlbeans/src:. YamlTest

YAML en php

Installer l'extension yaml de php :
sudo apt install php8.0-yaml
<?php
$yaml = yaml_parse_file('test.yml');
echo "\n"; print_r($yaml); echo "\n";