Prefixing a member with -- disables it:

--debug: true,
--"verbose logging": true,

A disabled member is invisible to queries — for the consuming program it does not exist — but it is preserved verbatim and written back with its prefix. Think of it as a structured, machine-readable alternative to commenting a line out. The prefix works with quoted and bare keys alike, and a disabled member may share its name with an active one.

The -- marker is part of the object member production:

-- disables the whole definition

-- disables the entire value that follows it, not just its first line. A disabled member whose value spans several lines — an array, a nested object, or a multi-line |-block — has that whole value parsed and skipped:

--dizi: [
  1, 2, 3
],

disables the complete dizi array. The parser does not process the first line and then trip over the rest.

Keyless disabled |-blocks

The same applies to a keyless multi-line |-block: -- before a |-block disables the entire block (all its contiguous |-lines), and parsing resumes at the next member.

str: | active
--|this whole
  |block is
  |disabled
pi: 3.14

Here str and pi are active; the three |-lines between them form one disabled, keyless member — preserved structurally, invisible to queries, written back as --|… lines (no key, no :). This is the one place a value may appear without a key, and only when disabled.

Converting away the --

JSON and JSON5 have no -- syntax. When converting (FsonWriter::Dialect::Json / Json5), a disabled member is handled by DisabledMemberPolicy: become a comment (default for JSON5), become an ordinary member (--keep), or be dropped (--drop-disabled, and the only option for plain JSON).