
# JSONC

Die Speicherdateien von storh sind JSON-Objekte. Beim Lesen wird JSONC mit Zeilenkommentaren, Blockkommentaren und abschließenden Kommas akzeptiert. Dadurch lassen sich Datensatzdateien sicher in einem Editor öffnen und kommentieren; storh kann sie weiterhin verarbeiten.

```jsonc
{
  // Application-owned fields live under data.
  "id": "018bcfe5-6800-7000-8000-000000000000",
  "data": {
    "title": "Home",
  },
}
```

Beim Lesen wird zuerst ein striktes `json_decode` versucht. Nur wenn das fehlschlägt, wird auf den JSONC-Bereinigungsmechanismus zurückgegriffen, sodass kanonische Dateien nicht für die Kommentarverarbeitung aufkommen müssen.

## Was storh schreibt

Geschrieben wird kanonisches, kompaktes, einzeiliges JSON mit einem abschließenden Zeilenumbruch:

```text
{"id":"018bcfe5-6800-7000-8000-000000000000","data":{"title":"Home"}}
```

Kommentare und eigene Formatierungen bleiben erhalten, bis storh den Datensatz erneut schreibt. Ein `put()` für dieselbe ID ersetzt die gesamte Datei durch eine kanonische Ausgabe. Behandle Kommentare daher als temporäre Notizen, nicht als dauerhafte Metadaten. Dauerhafte Informationen gehören in `data`.

Bei der Kodierung bleiben Unicode und Schrägstriche unmaskiert, und Nachkommastellen bei Fließkommazahlen bleiben erhalten (`1.0` bleibt `1.0`). Dadurch sind die Bytes nach dem Dekodieren und erneuten Kodieren derselben Daten identisch. Indexmanifeste und andere interne Metadatendateien sind JSON-Objekte und werden mit derselben Toleranz gelesen.

`Jsonc::decode_object()` weist Dokumente zurück, die keine Objekte sind oder fehlerhafte Eingaben enthalten. `Jsonc::encode_object()` und `Jsonc::encode_compact_object()` schreiben Arrays als Objektdokumente.
