
# 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` 中。

编码时会保留未转义的 Unicode 字符和斜杠，并保留浮点数的零小数部分（`1.0` 保持为 `1.0`），因此对相同数据进行解码再编码后，字节内容保持稳定。索引清单及其他内部元数据文件均为 JSON 对象，读取时也有相同的容错能力。

`Jsonc::decode_object()` 会拒绝非对象文档和格式错误的输入。
`Jsonc::encode_object()` 和 `Jsonc::encode_compact_object()` 会将数组写为
对象文档。
