
# JSONC

Pliki magazynu storh to obiekty JSON, a odczyt obsługuje JSONC: komentarze wierszowe i blokowe oraz końcowe przecinki. Dzięki temu pliki rekordów można bezpiecznie otwierać i opatrywać adnotacjami w edytorze; storh nadal je parsuje.

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

Odczyt najpierw próbuje ścisłego `json_decode`, a dopiero gdy się nie powiedzie, korzysta ze zmywacza JSONC, więc kanoniczne pliki nie ponoszą kosztu obsługi komentarzy.

## Co zapisuje storh

Zapisy mają postać kanonicznego, zwartego, jednoliniowego JSON z końcowym znakiem nowej linii:

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

Komentarze i własne formatowanie pozostają do chwili, gdy storh ponownie zapisze ten rekord.
`put()` do tego samego identyfikatora zastępuje cały plik kanonicznym wynikiem, więc
traktuj komentarze jako notatki robocze, a nie trwałe metadane. Trwałe informacje
należą do `data`.

Kodowanie zachowuje znaki Unicode i ukośniki bez sekwencji ucieczki oraz zachowuje
ułamkowe części liczb zmiennoprzecinkowych równych zero (`1.0` pozostaje `1.0`), dzięki czemu dekodowanie i ponowne kodowanie tych samych danych daje
identyczny wynik bajt po bajcie. Manifesty indeksów i inne wewnętrzne pliki metadanych są obiektami JSON
z taką samą tolerancją odczytu.

`Jsonc::decode_object()` odrzuca dokumenty niebędące obiektami i nieprawidłowe dane wejściowe.
`Jsonc::encode_object()` i `Jsonc::encode_compact_object()` zapisują tablice jako
dokumenty obiektowe.
