Open

Description
If you try to examine a const JSONVar
object using operator[]
(e.g. auto foo = myVar["bar"]
), the compiler will (obviously) not be able locate the nonexistent const operator[]
, but it won't quit there. Instead, it will (silently) beat your JSONVar sword into some unrelated plowshare and apply type type's const operator[]
, with predictably nonsensical results.
For example, this code:
const JSONVar myVar1 = JSON.parse( "{\"foo\": \"bar\"}" );
auto myVar2 = myVar1[ "foo" ];
Serial.print( "foo: " );
Serial.println( myVar2 );
produces this output:
foo: f
If I add this method to JSONVar:
JSONVar JSONVar::operator[]( const char* key ) const
{
if ( !cJSON_IsObject( _json ) )
{
return undefined;
}
cJSON* json = cJSON_GetObjectItemCaseSensitive( _json, key );
if ( json == NULL )
{
json = cJSON_AddNullToObject( _json, key );
}
return JSONVar( json, _json );
}
then the output changes to a more reasonable
foo: "bar"
Metadata
Metadata
Assignees
Labels
No labels