diff --git a/include/persistent_data.hpp b/include/persistent_data.hpp
index 1c463b1..efdfcfa 100644
--- a/include/persistent_data.hpp
+++ b/include/persistent_data.hpp
@@ -106,16 +106,29 @@
                     }
                     else if (item.first == "auth_config")
                     {
+                        const nlohmann::json::object_t* jObj =
+                            item.second
+                                .get_ptr<const nlohmann::json::object_t*>();
+                        if (jObj == nullptr)
+                        {
+                            continue;
+                        }
                         SessionStore::getInstance()
                             .getAuthMethodsConfig()
-                            .fromJson(item.second);
+                            .fromJson(*jObj);
                     }
                     else if (item.first == "sessions")
                     {
                         for (const auto& elem : item.second)
                         {
+                            const nlohmann::json::object_t* jObj =
+                                elem.get_ptr<const nlohmann::json::object_t*>();
+                            if (jObj == nullptr)
+                            {
+                                continue;
+                            }
                             std::shared_ptr<UserSession> newSession =
-                                UserSession::fromJson(elem);
+                                UserSession::fromJson(*jObj);
 
                             if (newSession == nullptr)
                             {
@@ -168,8 +181,15 @@
                     {
                         for (const auto& elem : item.second)
                         {
+                            const nlohmann::json::object_t* subobj =
+                                elem.get_ptr<const nlohmann::json::object_t*>();
+                            if (subobj == nullptr)
+                            {
+                                continue;
+                            }
+
                             std::optional<UserSubscription> newSub =
-                                UserSubscription::fromJson(elem);
+                                UserSubscription::fromJson(*subobj);
 
                             if (!newSub)
                             {
