Full structural access, at the parser / writer level. Sees disabled members.

MemberBehaviour
memberCount() → std::size_tincluding disabled members
getMember(index) → Member&throws std::out_of_range (const overload → Member const&)
appendMember(Member) → Member&returns the stored member
eraseMember(index)
getDanglingComments() → CommentList&comments before }

This is how you iterate (there is no indexed active-member accessor in the query API):

for( std::size_t k = 0; k < obj.memberCount(); ++k )
{
  Member const& m = obj.getMember( k );
  if( m.isDisabled() ) continue;
  use( m.getKey(), m.getValue() );
}

See Member for its accessors (getKey / getValue / isDisabled / trivia / provenance).

Include API — %include directives

Directives are structural nodes kept in source order alongside members (fson/Include.hh). Include carries getPath(), hasAlias() / getAlias(), isDisabled() / setDisabled(), leading / trailing comments, and clone().

MemberBehaviour
includeCount() → std::size_t%include directives in this object
getInclude(index) → Include&throws std::out_of_range
appendInclude(Include) → Include&returns the stored directive
eraseInclude(index)

Entry order

entryCount() / getEntry(pos) → Entry const& expose the object body as one ordered list of Entry{ EntryKind kind, std::size_t index }kind is Member or Include, index points into the respective list. The writer uses this to round-trip members and directives in their original interleaved order.