diff --git a/include/login_routes.hpp b/include/login_routes.hpp
index 864ca00..4b4a621 100644
--- a/include/login_routes.hpp
+++ b/include/login_routes.hpp
@@ -97,20 +97,27 @@
                         }
                     }
                 }
-                else if (dataIt->is_object())
+                else
                 {
-                    nlohmann::json::iterator userIt2 = dataIt->find("username");
-                    nlohmann::json::iterator passIt2 = dataIt->find("password");
-                    if (userIt2 != dataIt->end() && passIt2 != dataIt->end())
+                    nlohmann::json::object_t* obj =
+                        dataIt->get_ptr<nlohmann::json::object_t*>();
+                    if (obj != nullptr)
                     {
-                        const std::string* userStr =
-                            userIt2->get_ptr<const std::string*>();
-                        const std::string* passStr =
-                            passIt2->get_ptr<const std::string*>();
-                        if (userStr != nullptr && passStr != nullptr)
+                        nlohmann::json::object_t::iterator userIt2 =
+                            obj->find("username");
+                        nlohmann::json::object_t::iterator passIt2 =
+                            obj->find("password");
+                        if (userIt2 != obj->end() && passIt2 != obj->end())
                         {
-                            username = *userStr;
-                            password = *passStr;
+                            const std::string* userStr =
+                                userIt2->second.get_ptr<const std::string*>();
+                            const std::string* passStr =
+                                passIt2->second.get_ptr<const std::string*>();
+                            if (userStr != nullptr && passStr != nullptr)
+                            {
+                                username = *userStr;
+                                password = *passStr;
+                            }
                         }
                     }
                 }
diff --git a/include/openbmc_dbus_rest.hpp b/include/openbmc_dbus_rest.hpp
index f651c38..5963486 100644
--- a/include/openbmc_dbus_rest.hpp
+++ b/include/openbmc_dbus_rest.hpp
@@ -1321,23 +1321,27 @@
     // seems better to get the data back somehow.
     nlohmann::json::object_t* dataobj =
         data.get_ptr<nlohmann::json::object_t*>();
-    if (transaction->methodResponse.is_object() && dataobj != nullptr)
+
+    nlohmann::json::object_t* methodResponseObj =
+        transaction->methodResponse.get_ptr<nlohmann::json::object_t*>();
+    if (methodResponseObj != nullptr && dataobj != nullptr)
     {
         for (auto& obj : *dataobj)
         {
             // Note: Will overwrite the data for a duplicate key
-            transaction->methodResponse.emplace(obj.first,
-                                                std::move(obj.second));
+            methodResponseObj->emplace(obj.first, std::move(obj.second));
         }
         return;
     }
 
     nlohmann::json::array_t* dataarr = data.get_ptr<nlohmann::json::array_t*>();
-    if (transaction->methodResponse.is_array() && dataarr != nullptr)
+    nlohmann::json::array_t* methodResponseArr =
+        transaction->methodResponse.get_ptr<nlohmann::json::array_t*>();
+    if (methodResponseArr != nullptr && dataarr != nullptr)
     {
         for (auto& obj : *dataarr)
         {
-            transaction->methodResponse.emplace_back(std::move(obj));
+            methodResponseArr->emplace_back(std::move(obj));
         }
         return;
     }
diff --git a/redfish-core/include/sub_request.hpp b/redfish-core/include/sub_request.hpp
index df8cf70..c44644a 100644
--- a/redfish-core/include/sub_request.hpp
+++ b/redfish-core/include/sub_request.hpp
@@ -31,7 +31,7 @@
             }
 
             auto oemIt = reqJson.find("Oem");
-            if (oemIt != reqJson.end() && oemIt->is_object())
+            if (oemIt != reqJson.end())
             {
                 const nlohmann::json::object_t* oemObj =
                     oemIt->get_ptr<const nlohmann::json::object_t*>();
diff --git a/redfish-core/include/utils/query_param.hpp b/redfish-core/include/utils/query_param.hpp
index ca2822d..57b5d06 100644
--- a/redfish-core/include/utils/query_param.hpp
+++ b/redfish-core/include/utils/query_param.hpp
@@ -771,12 +771,14 @@
     {
         BMCWEB_LOG_DEBUG("placeResult for {}", locationToPlace);
         propogateError(finalRes->res, res);
-        if (!res.jsonValue.is_object() || res.jsonValue.empty())
+        nlohmann::json::object_t* obj =
+            res.jsonValue.get_ptr<nlohmann::json::object_t*>();
+        if (obj == nullptr || res.jsonValue.empty())
         {
             return;
         }
         nlohmann::json& finalObj = finalRes->res.jsonValue[locationToPlace];
-        finalObj = std::move(res.jsonValue);
+        finalObj = std::move(*obj);
     }
 
     // Handles the very first level of Expand, and starts a chain of sub-queries
