Ce que fait cet outil
L’imbrication devient des points, les listes des indices :
db:
host: db.example.com
port: 5432
hosts:
- a
- b
db.host=db.example.com
db.port=5432
hosts[0]=a
hosts[1]=b
La forme [i] est la convention Spring, celle que la plupart des lecteurs attendent.
L’échappement est tout le travail
Un fichier .properties est d’une simplicité trompeuse, et trois de ses règles mangent des données en silence.
Une valeur qui commence par une espace. Properties.load saute les blancs après le séparateur : cle= x se relit x. La première espace est échappée — cle=\ x — et la valeur survit. Les espaces finales sont conservées telles quelles.
Une clé qui commence par # ou !. Cette ligne est un commentaire. L’entrée entière, clé et valeur, disparaît à la relecture. Ces deux caractères sont échappés quand ils ouvrent une clé.
=, : et les espaces dans une clé sont échappés aussi, ainsi que chaque antislash. Un saut de ligne dans une valeur devient \n, une tabulation \t.
Deux clés qui s’aplatissent sur le même nom
"a.b": 1
a:
b: 2
Les deux donnent a.b. Le format ne sait pas les distinguer, et Properties.load garde la dernière : une de vos deux valeurs aurait disparu, sans rien pour le dire.
La conversion s’arrête et nomme la clé. C’est le seul cas où cet outil refuse au lieu de convertir, et c’est le cas où convertir mentirait.
Il n’y a pas de types
Tout, dans un fichier .properties, est du texte. true revient en "true", 42 en "42", et un null en valeur vide. C’est votre lecteur qui décide du sens : Boolean.parseBoolean, Integer.parseInt, et une décision sur ce que veut dire « vide ».
Un mot sur l’encodage
La sortie est du texte UTF-8, accents compris. C’est ce que lit Java moderne, et ce qu’a toujours lu Properties.load(Reader).
Mais Properties.load(InputStream) — l’appel plus ancien, et le plus répandu — lit de l’ISO-8859-1 et transformera café en charabia. Si c’est votre lecteur, passez à la surcharge Reader ou échappez les caractères non ASCII en \uXXXX avant d’expédier le fichier.
Confidentiel par conception
Tout s’exécute localement dans votre navigateur en JavaScript. Vos données ne sont jamais envoyées sur un serveur, ce qui rend l’outil sûr pour des contenus sensibles, et il fonctionne hors ligne.