diff --git a/src/ArduinoJson/Object/ObjectImpl.hpp b/src/ArduinoJson/Object/ObjectImpl.hpp index a55503a2..1c57513a 100644 --- a/src/ArduinoJson/Object/ObjectImpl.hpp +++ b/src/ArduinoJson/Object/ObjectImpl.hpp @@ -34,7 +34,8 @@ inline ObjectImpl::iterator ObjectImpl::findKey(TAdaptedString key) const { bool isKey = true; for (auto it = createIterator(); !it.done(); it.next(resources_)) { VariantImpl variant(it.data(), resources_); - if (isKey && stringEquals(key, adaptString(variant.asString()))) + if (isKey && stringEquals(key, adaptString(VariantImpl::asString( + it.data(), resources_)))) return it; isKey = !isKey; } diff --git a/src/ArduinoJson/Variant/VariantData.hpp b/src/ArduinoJson/Variant/VariantData.hpp index 11632d16..bc9a8721 100644 --- a/src/ArduinoJson/Variant/VariantData.hpp +++ b/src/ArduinoJson/Variant/VariantData.hpp @@ -316,7 +316,16 @@ class VariantImpl { } JsonString asString() const { - switch (type()) { + if (!data_) + return JsonString(); + return asString(data_, resources_); + } + + static JsonString asString(VariantData* data_, ResourceManager* resources_) { + ARDUINOJSON_ASSERT(data_ != nullptr); + ARDUINOJSON_ASSERT(resources_ != nullptr); + + switch (data_->type) { case VariantType::TinyString: return JsonString(data_->content.asTinyString); case VariantType::LongString: