diff --git a/redfish-core/include/error_messages.hpp b/redfish-core/include/error_messages.hpp
index 99e9ae8..77aa895 100644
--- a/redfish-core/include/error_messages.hpp
+++ b/redfish-core/include/error_messages.hpp
@@ -571,10 +571,10 @@
  * @param[in] arg2 Parameter of message that will replace %2 in its body.
  *
  * @returns Message PropertyValueTypeError formatted to JSON */
-nlohmann::json propertyValueTypeError(std::string_view arg1,
+nlohmann::json propertyValueTypeError(const nlohmann::json& arg1,
                                       std::string_view arg2);
 
-void propertyValueTypeError(crow::Response& res, std::string_view arg1,
+void propertyValueTypeError(crow::Response& res, const nlohmann::json& arg1,
                             std::string_view arg2);
 
 /**
diff --git a/redfish-core/include/utils/json_utils.hpp b/redfish-core/include/utils/json_utils.hpp
index 7c70142..6e18157 100644
--- a/redfish-core/include/utils/json_utils.hpp
+++ b/redfish-core/include/utils/json_utils.hpp
@@ -219,20 +219,12 @@
     {
         if (!jsonValue.is_array())
         {
-            messages::propertyValueTypeError(
-                res,
-                res.jsonValue.dump(2, ' ', true,
-                                   nlohmann::json::error_handler_t::replace),
-                key);
+            messages::propertyValueTypeError(res, res.jsonValue, key);
             return false;
         }
         if (jsonValue.size() != value.size())
         {
-            messages::propertyValueTypeError(
-                res,
-                res.jsonValue.dump(2, ' ', true,
-                                   nlohmann::json::error_handler_t::replace),
-                key);
+            messages::propertyValueTypeError(res, res.jsonValue, key);
             return false;
         }
         size_t index = 0;
@@ -247,11 +239,7 @@
     {
         if (!jsonValue.is_array())
         {
-            messages::propertyValueTypeError(
-                res,
-                res.jsonValue.dump(2, ' ', true,
-                                   nlohmann::json::error_handler_t::replace),
-                key);
+            messages::propertyValueTypeError(res, res.jsonValue, key);
             return false;
         }
 
@@ -270,11 +258,7 @@
         {
             if (ec == UnpackErrorCode::invalidType)
             {
-                messages::propertyValueTypeError(
-                    res,
-                    jsonValue.dump(2, ' ', true,
-                                   nlohmann::json::error_handler_t::replace),
-                    key);
+                messages::propertyValueTypeError(res, jsonValue, key);
             }
             else if (ec == UnpackErrorCode::outOfRange)
             {
diff --git a/redfish-core/lib/account_service.hpp b/redfish-core/lib/account_service.hpp
index 5e9de4e..6f5f122 100644
--- a/redfish-core/lib/account_service.hpp
+++ b/redfish-core/lib/account_service.hpp
@@ -393,11 +393,9 @@
             else
             {
                 BMCWEB_LOG_ERROR << "Can't delete the object";
-                messages::propertyValueTypeError(
-                    asyncResp->res,
-                    thisJson.dump(2, ' ', true,
-                                  nlohmann::json::error_handler_t::replace),
-                    "RemoteRoleMapping/" + std::to_string(index));
+                messages::propertyValueTypeError(asyncResp->res, thisJson,
+                                                 "RemoteRoleMapping/" +
+                                                     std::to_string(index));
                 return;
             }
         }
diff --git a/redfish-core/lib/ethernet.hpp b/redfish-core/lib/ethernet.hpp
index 1d2c988..411659d 100644
--- a/redfish-core/lib/ethernet.hpp
+++ b/redfish-core/lib/ethernet.hpp
@@ -1233,11 +1233,8 @@
 {
     if (input.empty())
     {
-        messages::propertyValueTypeError(
-            asyncResp->res,
-            nlohmann::json(input).dump(
-                2, ' ', true, nlohmann::json::error_handler_t::replace),
-            "IPv4StaticAddresses");
+        messages::propertyValueTypeError(asyncResp->res, input,
+                                         "IPv4StaticAddresses");
         return;
     }
 
@@ -1438,11 +1435,8 @@
 {
     if (input.empty())
     {
-        messages::propertyValueTypeError(
-            asyncResp->res,
-            nlohmann::json(input).dump(
-                2, ' ', true, nlohmann::json::error_handler_t::replace),
-            "IPv6StaticAddresses");
+        messages::propertyValueTypeError(asyncResp->res, input,
+                                         "IPv6StaticAddresses");
         return;
     }
     size_t entryIdx = 1;
diff --git a/redfish-core/lib/hypervisor_system.hpp b/redfish-core/lib/hypervisor_system.hpp
index c06bd1f..5a7105f 100644
--- a/redfish-core/lib/hypervisor_system.hpp
+++ b/redfish-core/lib/hypervisor_system.hpp
@@ -566,7 +566,7 @@
 {
     if ((!input.is_array()) || input.empty())
     {
-        messages::propertyValueTypeError(asyncResp->res, input.dump(),
+        messages::propertyValueTypeError(asyncResp->res, input,
                                          "IPv4StaticAddresses");
         return;
     }
@@ -885,11 +885,8 @@
             const nlohmann::json& ipv4Static = *ipv4StaticAddresses;
             if (ipv4Static.begin() == ipv4Static.end())
             {
-                messages::propertyValueTypeError(
-                    asyncResp->res,
-                    ipv4Static.dump(2, ' ', true,
-                                    nlohmann::json::error_handler_t::replace),
-                    "IPv4StaticAddresses");
+                messages::propertyValueTypeError(asyncResp->res, ipv4Static,
+                                                 "IPv4StaticAddresses");
                 return;
             }
 
diff --git a/redfish-core/src/error_messages.cpp b/redfish-core/src/error_messages.cpp
index fcb8bcb..abc817d 100644
--- a/redfish-core/src/error_messages.cpp
+++ b/redfish-core/src/error_messages.cpp
@@ -979,14 +979,16 @@
  * See header file for more information
  * @endinternal
  */
-nlohmann::json propertyValueTypeError(std::string_view arg1,
+nlohmann::json propertyValueTypeError(const nlohmann::json& arg1,
                                       std::string_view arg2)
 {
+    std::string arg1Str = arg1.dump(2, ' ', true,
+                                    nlohmann::json::error_handler_t::replace);
     return getLog(redfish::registries::base::Index::propertyValueTypeError,
-                  std::to_array({arg1, arg2}));
+                  std::to_array<std::string_view>({arg1Str, arg2}));
 }
 
-void propertyValueTypeError(crow::Response& res, std::string_view arg1,
+void propertyValueTypeError(crow::Response& res, const nlohmann::json& arg1,
                             std::string_view arg2)
 {
     res.result(boost::beast::http::status::bad_request);
