
# JSONC

storh 저장 파일은 JSON 객체이며, 읽을 때 JSONC을 허용합니다. 줄 주석, 블록 주석 및 후행 쉼표를 사용할 수 있어 편집기에서 레코드 파일을 열고 주석을 추가하기 편리합니다. storh는 여전히 해당 파일을 파싱합니다.

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

읽기는 먼저 엄격한 `json_decode` 파서를 시도하고 실패할 때만 JSONC 제거기를 사용하므로 정규 파일은 주석 처리 비용을 부담하지 않습니다.

## storh에서 쓰는 형식

쓰기 결과는 정규 형식의 간결한 한 줄 JSON이며 끝에 줄바꿈이 붙습니다:

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

주석과 사용자 지정 서식은 해당 레코드를 storh가 다시 기록할 때까지 유지됩니다.
같은 ID에 `put()`를 수행하면 파일 전체가 표준 출력으로 교체되므로
주석은 오래 보존되는 메타데이터가 아니라 임시 메모로 취급하세요. 오래 보존해야 하는 정보는
`data`에 저장하세요.

인코딩은 유니코드와 슬래시를 이스케이프하지 않고 보존하며 부동 소수점 0의
소수 부분도 유지하므로(`1.0`는 `1.0`로 유지됨), 동일한 데이터를 디코딩한 뒤 다시 인코딩해도
바이트 단위로 동일합니다. 인덱스 매니페스트와 기타 내부 메타데이터 파일은
같은 읽기 허용 범위를 가진 JSON 객체입니다.

`Jsonc::decode_object()`는 객체가 아닌 문서와 잘못된 입력을 거부합니다.
`Jsonc::encode_object()`와 `Jsonc::encode_compact_object()`는 배열을
객체 문서로 기록합니다.
