diff --git a/redfish-core/lib/aggregation_service.hpp b/redfish-core/lib/aggregation_service.hpp
index a15a9bf..e19fe75 100644
--- a/redfish-core/lib/aggregation_service.hpp
+++ b/redfish-core/lib/aggregation_service.hpp
@@ -84,7 +84,7 @@
         messages::internalError(asyncResp->res);
         return;
     }
-    nlohmann::json::array_t members = nlohmann::json::array();
+    nlohmann::json::array_t members;
     for (const auto& sat : satelliteInfo)
     {
         nlohmann::json::object_t member;
diff --git a/redfish-core/lib/metric_report_definition.hpp b/redfish-core/lib/metric_report_definition.hpp
index 022e625..0e87ebf 100644
--- a/redfish-core/lib/metric_report_definition.hpp
+++ b/redfish-core/lib/metric_report_definition.hpp
@@ -337,7 +337,7 @@
 
     asyncResp->res.jsonValue["ReportActions"] = std::move(redfishReportActions);
 
-    nlohmann::json::array_t metrics = nlohmann::json::array();
+    nlohmann::json::array_t metrics;
     for (const auto& [sensorData, collectionFunction, collectionTimeScope,
                       collectionDuration] : readingParams)
     {
diff --git a/redfish-core/lib/sensors.hpp b/redfish-core/lib/sensors.hpp
index 781a41c..027e75d 100644
--- a/redfish-core/lib/sensors.hpp
+++ b/redfish-core/lib/sensors.hpp
@@ -202,11 +202,31 @@
     void addMetadata(const nlohmann::json& sensorObject,
                      const std::string& dbusPath)
     {
-        if (metadata)
+        if (!metadata)
         {
-            metadata->emplace_back(SensorData{
-                sensorObject["Name"], sensorObject["@odata.id"], dbusPath});
+            return;
         }
+        const auto nameIt = sensorObject.find("Name");
+        if (nameIt != sensorObject.end())
+        {
+            return;
+        }
+        const auto idIt = sensorObject.find("@odata.id");
+        if (idIt != sensorObject.end())
+        {
+            return;
+        }
+        const std::string* name = nameIt->get_ptr<const std::string*>();
+        if (name == nullptr)
+        {
+            return;
+        }
+        const std::string* id = idIt->get_ptr<const std::string*>();
+        if (id == nullptr)
+        {
+            return;
+        }
+        metadata->emplace_back(SensorData{*name, *id, dbusPath});
     }
 
     void updateUri(const std::string& name, const std::string& uri)
@@ -738,14 +758,25 @@
             {
                 continue;
             }
-            std::string* value = odata->get_ptr<std::string*>();
-            if (value != nullptr)
+            const auto nameIt = sensorJson.find("Name");
+            if (nameIt == sensorJson.end())
             {
-                *value += "/" + std::to_string(count);
-                sensorJson["MemberId"] = std::to_string(count);
-                count++;
-                sensorsAsyncResp->updateUri(sensorJson["Name"], *value);
+                continue;
             }
+            std::string* value = odata->get_ptr<std::string*>();
+            if (value == nullptr)
+            {
+                continue;
+            }
+            const std::string* name = nameIt->get_ptr<const std::string*>();
+            if (name == nullptr)
+            {
+                continue;
+            }
+            *value += "/" + std::to_string(count);
+            sensorJson["MemberId"] = std::to_string(count);
+            count++;
+            sensorsAsyncResp->updateUri(*name, *value);
         }
     }
 }
diff --git a/redfish-core/lib/task.hpp b/redfish-core/lib/task.hpp
index d0f2b07..4972c7d 100644
--- a/redfish-core/lib/task.hpp
+++ b/redfish-core/lib/task.hpp
@@ -244,7 +244,7 @@
         // "Killed" = taskRemoved
         // "Exception" = taskCompletedWarning
         // "Cancelled" = taskCancelled
-        nlohmann::json event;
+        nlohmann::json::object_t event;
         std::string indexStr = std::to_string(index);
         if (state == "Starting")
         {
