
# JSONC

Soubory úložiště storh jsou objekty JSON a při čtení přijímají JSONC: řádkové komentáře,
blokové komentáře a koncové čárky. Díky tomu lze soubory záznamů bezpečně otevřít a
opatřit poznámkami v editoru; storh je přesto stále dokáže zpracovat.

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

Při čtení se nejprve zkouší striktní `json_decode` a k odstraňovači JSONC se přejde
jen při neúspěchu, takže se u kanonických souborů zbytečně nezpracovávají komentáře.

## What storh writes

Zápisy mají kanonický kompaktní formát JSON na jednom řádku a končí znakem nového řádku:

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

Komentáře a vlastní formátování zůstávají zachovány, dokud záznam znovu nepřepíše storh.
`put()` se stejným ID nahradí celý soubor kanonickým výstupem, proto berte komentáře jako
pracovní poznámky, nikoli jako trvalá metadata. Trvalé informace patří do `data`.

Kódování zachovává Unicode a neescapované lomítka a ponechává desetinnou část nulových
čísel s plovoucí desetinnou čárkou (`1.0` zůstává `1.0`), takže dekódování a opětovné
zakódování stejných dat je bajtově stabilní. Indexové manifesty a další interní soubory
metadat jsou objekty JSON se stejnou tolerancí při čtení.

`Jsonc::decode_object()` odmítá dokumenty, které nejsou objekty, i nesprávně utvořený vstup.
`Jsonc::encode_object()` a `Jsonc::encode_compact_object()` zapisují pole jako
objektové dokumenty.
