Every method here addresses members by name and skips disabled members.
| Member | Behaviour |
|---|---|
size() → std::size_t | active member count |
empty() → bool | |
contains(name) → bool | |
find(name) → Value* | nullptr when no active member has this name (const overload → Value const*) |
at(name) → Value& | throws std::out_of_range when absent |
set(Key, value) → Value& | replaces the active member's value, or appends a new member; returns the stored value |
set(name, value) → Value& | string overload: bare key when name is grammar-valid, quoted otherwise |
remove(name) → bool | removes the active member; false when absent |
set never touches a disabled member — a new active member is appended beside it.
Object& db = *doc.getRootObject()->find( "database" )->asObject();
db.contains( "host" ); // true
db.at( "port" ).asNumber()->asInteger(); // 5432
db.set( "host", std::make_unique<String>( "db1" ) ); // replace
db.set( "pool_size", std::make_unique<Number>( 8LL ) ); // append (bare key)
db.remove( "user" );
To iterate, use the member API and skip isDisabled() members — there is no indexed active-member accessor.

