diff --git a/src/ArduinoJson/Object/ObjectRef.hpp b/src/ArduinoJson/Object/ObjectRef.hpp index 8ea33dfe..447ecde8 100644 --- a/src/ArduinoJson/Object/ObjectRef.hpp +++ b/src/ArduinoJson/Object/ObjectRef.hpp @@ -264,7 +264,9 @@ struct Converter { static ObjectRef fromJson(VariantRef src) { VariantData* data = getData(src); MemoryPool* pool = getPool(src); - return ObjectRef(pool, data != 0 ? data->asObject() : 0); + if (!data) + return ObjectRef(); + return ObjectRef(pool, data->asObject()); } static InvalidConversion fromJson( diff --git a/src/ArduinoJson/Variant/VariantData.hpp b/src/ArduinoJson/Variant/VariantData.hpp index 1d57c6a4..9b293e89 100644 --- a/src/ArduinoJson/Variant/VariantData.hpp +++ b/src/ArduinoJson/Variant/VariantData.hpp @@ -108,8 +108,6 @@ class VariantData { } const CollectionData *asObject() const { - if (isPointer()) // P+20 G+0 - return _content.asPointer->asObject(); return const_cast(this)->asObject(); } @@ -321,7 +319,7 @@ class VariantData { template VariantData *getMember(TAdaptedString key) const { // P+4 G+0 - const CollectionData *col = asObject(); + const CollectionData *col = resolve()->asObject(); return col ? col->getMember(key) : 0; } diff --git a/src/ArduinoJson/Variant/VariantFunctions.hpp b/src/ArduinoJson/Variant/VariantFunctions.hpp index 8890597e..e36e3559 100644 --- a/src/ArduinoJson/Variant/VariantFunctions.hpp +++ b/src/ArduinoJson/Variant/VariantFunctions.hpp @@ -24,7 +24,7 @@ inline const CollectionData *variantAsArray(const VariantData *var) { } inline const CollectionData *variantAsObject(const VariantData *var) { - return var != 0 ? var->asObject() : 0; + return var != 0 ? var->resolve()->asObject() : 0; } inline CollectionData *variantAsObject(VariantData *var) {