diff --git a/include/dbus_monitor.hpp b/include/dbus_monitor.hpp
index 764d157..977f3a3 100644
--- a/include/dbus_monitor.hpp
+++ b/include/dbus_monitor.hpp
@@ -45,8 +45,9 @@
         return 0;
     }
     sdbusplus::message::message message(m);
-    nlohmann::json j{{"event", message.get_member()},
-                     {"path", message.get_path()}};
+    nlohmann::json json;
+    json["event"] = message.get_member();
+    json["path"] = message.get_path();
     if (strcmp(message.get_member(), "PropertiesChanged") == 0)
     {
         nlohmann::json data;
@@ -63,8 +64,8 @@
         }
 
         // data is type sa{sv}as and is an array[3] of string, object, array
-        j["interface"] = data[0];
-        j["properties"] = data[1];
+        json["interface"] = data[0];
+        json["properties"] = data[1];
     }
     else if (strcmp(message.get_member(), "InterfacesAdded") == 0)
     {
@@ -88,7 +89,7 @@
             auto it = thisSession->second.interfaces.find(entry.key());
             if (it != thisSession->second.interfaces.end())
             {
-                j["interfaces"][entry.key()] = entry.value();
+                json["interfaces"][entry.key()] = entry.value();
             }
         }
     }
@@ -100,7 +101,7 @@
     }
 
     connection->sendText(
-        j.dump(2, ' ', true, nlohmann::json::error_handler_t::replace));
+        json.dump(2, ' ', true, nlohmann::json::error_handler_t::replace));
     return 0;
 }
 
diff --git a/include/ibm/management_console_rest.hpp b/include/ibm/management_console_rest.hpp
index 8e30746..0fbd2e2 100644
--- a/include/ibm/management_console_rest.hpp
+++ b/include/ibm/management_console_rest.hpp
@@ -690,12 +690,12 @@
                 asyncResp->res.jsonValue["@odata.id"] = "/ibm/v1/";
                 asyncResp->res.jsonValue["Id"] = "IBM Rest RootService";
                 asyncResp->res.jsonValue["Name"] = "IBM Service Root";
-                asyncResp->res.jsonValue["ConfigFiles"] = {
-                    {"@odata.id", "/ibm/v1/Host/ConfigFiles"}};
-                asyncResp->res.jsonValue["LockService"] = {
-                    {"@odata.id", "/ibm/v1/HMC/LockService"}};
-                asyncResp->res.jsonValue["BroadcastService"] = {
-                    {"@odata.id", "/ibm/v1/HMC/BroadcastService"}};
+                asyncResp->res.jsonValue["ConfigFiles"]["@odata.id"] =
+                    "/ibm/v1/Host/ConfigFiles";
+                asyncResp->res.jsonValue["LockService"]["@odata.id"] =
+                    "/ibm/v1/HMC/LockService";
+                asyncResp->res.jsonValue["BroadcastService"]["@odata.id"] =
+                    "/ibm/v1/HMC/BroadcastService";
             });
 
     BMCWEB_ROUTE(app, "/ibm/v1/Host/ConfigFiles")
diff --git a/include/image_upload.hpp b/include/image_upload.hpp
index 330ea9c..aefb27e 100644
--- a/include/image_upload.hpp
+++ b/include/image_upload.hpp
@@ -51,12 +51,10 @@
         }
 
         asyncResp->res.result(boost::beast::http::status::bad_request);
-        asyncResp->res.jsonValue = {
-            {"data",
-             {{"description",
-               "Version already exists or failed to be extracted"}}},
-            {"message", "400 Bad Request"},
-            {"status", "error"}};
+        asyncResp->res.jsonValue["data"]["description"] =
+            "Version already exists or failed to be extracted";
+        asyncResp->res.jsonValue["message"] = "400 Bad Request";
+        asyncResp->res.jsonValue["status"] = "error";
     };
 
     std::function<void(sdbusplus::message::message&)> callback =
@@ -80,8 +78,9 @@
                     leaf = path.str;
                 }
 
-                asyncResp->res.jsonValue = {
-                    {"data", leaf}, {"message", "200 OK"}, {"status", "ok"}};
+                asyncResp->res.jsonValue["data"] = leaf;
+                asyncResp->res.jsonValue["message"] = "200 OK";
+                asyncResp->res.jsonValue["status"] = "ok";
                 BMCWEB_LOG_DEBUG << "ending response";
                 fwUpdateMatcher = nullptr;
             }
diff --git a/include/login_routes.hpp b/include/login_routes.hpp
index abcdaee..a4fa9b7 100644
--- a/include/login_routes.hpp
+++ b/include/login_routes.hpp
@@ -199,11 +199,11 @@
                         // structure, and doesn't actually look at the status
                         // code.
                         // TODO(ed).... Fix that upstream
-                        asyncResp->res.jsonValue = {
-                            {"data",
-                             "User '" + std::string(username) + "' logged in"},
-                            {"message", "200 OK"},
-                            {"status", "ok"}};
+
+                        asyncResp->res.jsonValue["data"] =
+                            "User '" + std::string(username) + "' logged in";
+                        asyncResp->res.jsonValue["message"] = "200 OK";
+                        asyncResp->res.jsonValue["status"] = "ok";
 
                         // Hack alert.  Boost beast by default doesn't let you
                         // declare multiple headers of the same name, and in
@@ -226,8 +226,8 @@
                     else
                     {
                         // if content type is json, assume json token
-                        asyncResp->res.jsonValue = {
-                            {"token", session->sessionToken}};
+                        asyncResp->res.jsonValue["token"] =
+                            session->sessionToken;
                     }
                 }
             }
@@ -245,10 +245,10 @@
                 const auto& session = req.session;
                 if (session != nullptr)
                 {
-                    asyncResp->res.jsonValue = {
-                        {"data", "User '" + session->username + "' logged out"},
-                        {"message", "200 OK"},
-                        {"status", "ok"}};
+                    asyncResp->res.jsonValue["data"] =
+                        "User '" + session->username + "' logged out";
+                    asyncResp->res.jsonValue["message"] = "200 OK";
+                    asyncResp->res.jsonValue["status"] = "ok";
 
                     persistent_data::SessionStore::getInstance().removeSession(
                         session);
diff --git a/include/openbmc_dbus_rest.hpp b/include/openbmc_dbus_rest.hpp
index 4f4bd71..75e31f1 100644
--- a/include/openbmc_dbus_rest.hpp
+++ b/include/openbmc_dbus_rest.hpp
@@ -57,9 +57,9 @@
                              const std::string_view msg)
 {
     res.result(result);
-    res.jsonValue = {{"data", {{"description", desc}}},
-                     {"message", msg},
-                     {"status", "error"}};
+    res.jsonValue["data"]["description"] = desc;
+    res.jsonValue["message"] = msg;
+    res.jsonValue["status"] = "error";
 }
 
 inline void
@@ -69,9 +69,9 @@
 {
     if (transaction->res.jsonValue.is_null())
     {
-        transaction->res.jsonValue = {{"status", "ok"},
-                                      {"bus_name", processName},
-                                      {"objects", nlohmann::json::array()}};
+        transaction->res.jsonValue["status"] = "ok";
+        transaction->res.jsonValue["bus_name"] = processName;
+        transaction->res.jsonValue["objects"] = nlohmann::json::array();
     }
 
     crow::connections::systemBus->async_method_call(
@@ -87,8 +87,10 @@
                     << "\n";
                 return;
             }
-            transaction->res.jsonValue["objects"].push_back(
-                {{"path", objectPath}});
+            nlohmann::json::object_t object;
+            object["path"] = objectPath;
+
+            transaction->res.jsonValue["objects"].push_back(std::move(object));
 
             tinyxml2::XMLDocument doc;
 
@@ -468,9 +470,9 @@
                 }
                 else
                 {
-                    res.jsonValue = {{"status", "ok"},
-                                     {"message", "200 OK"},
-                                     {"data", methodResponse}};
+                    res.jsonValue["status"] = "ok";
+                    res.jsonValue["message"] = "200 OK";
+                    res.jsonValue["data"] = methodResponse;
                 }
             }
         }
@@ -1626,9 +1628,9 @@
             }
             else
             {
-                asyncResp->res.jsonValue = {{"status", "ok"},
-                                            {"message", "200 OK"},
-                                            {"data", objectPaths}};
+                asyncResp->res.jsonValue["status"] = "ok";
+                asyncResp->res.jsonValue["message"] = "200 OK";
+                asyncResp->res.jsonValue["data"] = objectPaths;
             }
         },
         "xyz.openbmc_project.ObjectMapper",
@@ -1642,9 +1644,9 @@
 {
     BMCWEB_LOG_DEBUG << "Doing enumerate on " << objectPath;
 
-    asyncResp->res.jsonValue = {{"message", "200 OK"},
-                                {"status", "ok"},
-                                {"data", nlohmann::json::object()}};
+    asyncResp->res.jsonValue["message"] = "200 OK";
+    asyncResp->res.jsonValue["status"] = "ok";
+    asyncResp->res.jsonValue["data"] = nlohmann::json::object();
 
     crow::connections::systemBus->async_method_call(
         [objectPath, asyncResp](
@@ -1773,10 +1775,11 @@
                                 }
                                 else
                                 {
-                                    asyncResp->res.jsonValue = {
-                                        {"status", "ok"},
-                                        {"message", "200 OK"},
-                                        {"data", *response}};
+                                    asyncResp->res.jsonValue["status"] = "ok";
+                                    asyncResp->res.jsonValue["message"] =
+                                        "200 OK";
+                                    asyncResp->res.jsonValue["data"] =
+                                        *response;
                                 }
                             }
                         });
@@ -2000,11 +2003,17 @@
                                                     else
                                                     {
                                                         transaction->asyncResp
-                                                            ->res.jsonValue = {
-                                                            {"status", "ok"},
-                                                            {"message",
-                                                             "200 OK"},
-                                                            {"data", nullptr}};
+                                                            ->res.jsonValue
+                                                                ["status"] =
+                                                            "ok";
+                                                        transaction->asyncResp
+                                                            ->res.jsonValue
+                                                                ["message"] =
+                                                            "200 OK";
+                                                        transaction->asyncResp
+                                                            ->res
+                                                            .jsonValue["data"] =
+                                                            nullptr;
                                                     }
                                                 });
                                     }
@@ -2178,16 +2187,17 @@
                     BMCWEB_LOG_ERROR << "XML document failed to parse "
                                      << processName << " " << objectPath
                                      << "\n";
-                    asyncResp->res.jsonValue = {{"status", "XML parse error"}};
+                    asyncResp->res.jsonValue["status"] = "XML parse error";
                     asyncResp->res.result(
                         boost::beast::http::status::internal_server_error);
                     return;
                 }
 
                 BMCWEB_LOG_DEBUG << introspectXml;
-                asyncResp->res.jsonValue = {{"status", "ok"},
-                                            {"bus_name", processName},
-                                            {"object_path", objectPath}};
+                asyncResp->res.jsonValue["status"] = "ok";
+                asyncResp->res.jsonValue["bus_name"] = processName;
+                asyncResp->res.jsonValue["object_path"] = objectPath;
+
                 nlohmann::json& interfacesArray =
                     asyncResp->res.jsonValue["interfaces"];
                 interfacesArray = nlohmann::json::array();
@@ -2199,7 +2209,9 @@
                     const char* ifaceName = interface->Attribute("name");
                     if (ifaceName != nullptr)
                     {
-                        interfacesArray.push_back({{"name", ifaceName}});
+                        nlohmann::json::object_t interface;
+                        interface["name"] = ifaceName;
+                        interfacesArray.push_back(std::move(interface));
                     }
 
                     interface = interface->NextSiblingElement("interface");
@@ -2235,10 +2247,11 @@
                         boost::beast::http::status::internal_server_error);
                     return;
                 }
-                asyncResp->res.jsonValue = {{"status", "ok"},
-                                            {"bus_name", processName},
-                                            {"interface", interfaceName},
-                                            {"object_path", objectPath}};
+
+                asyncResp->res.jsonValue["status"] = "ok";
+                asyncResp->res.jsonValue["bus_name"] = processName;
+                asyncResp->res.jsonValue["interface"] = interfaceName;
+                asyncResp->res.jsonValue["object_path"] = objectPath;
 
                 nlohmann::json& methodsArray =
                     asyncResp->res.jsonValue["methods"];
@@ -2313,9 +2326,13 @@
                         uri += interfaceName;
                         uri += "/";
                         uri += name;
-                        methodsArray.push_back({{"name", name},
-                                                {"uri", std::move(uri)},
-                                                {"args", argsArray}});
+
+                        nlohmann::json::object_t object;
+                        object["name"] = name;
+                        object["uri"] = std::move(uri);
+                        object["args"] = argsArray;
+
+                        methodsArray.push_back(std::move(object));
                     }
                     methods = methods->NextSiblingElement("method");
                 }
@@ -2343,8 +2360,10 @@
                     const char* name = signals->Attribute("name");
                     if (name != nullptr)
                     {
-                        signalsArray.push_back(
-                            {{"name", name}, {"args", argsArray}});
+                        nlohmann::json::object_t object;
+                        object["name"] = name;
+                        object["args"] = argsArray;
+                        signalsArray.push_back(std::move(object));
                     }
 
                     signals = signals->NextSiblingElement("signal");
@@ -2424,8 +2443,11 @@
         .methods(boost::beast::http::verb::get)(
             [](const crow::Request&,
                const std::shared_ptr<bmcweb::AsyncResp>& asyncResp) {
-                asyncResp->res.jsonValue = {{"buses", {{{"name", "system"}}}},
-                                            {"status", "ok"}};
+                nlohmann::json::array_t buses;
+                nlohmann::json& bus = buses.emplace_back();
+                bus["name"] = "system";
+                asyncResp->res.jsonValue["busses"] = std::move(buses);
+                asyncResp->res.jsonValue["status"] = "ok";
             });
 
     BMCWEB_ROUTE(app, "/bus/system/")
@@ -2445,11 +2467,13 @@
                     else
                     {
                         std::sort(names.begin(), names.end());
-                        asyncResp->res.jsonValue = {{"status", "ok"}};
+                        asyncResp->res.jsonValue["status"] = "ok";
                         auto& objectsSub = asyncResp->res.jsonValue["objects"];
                         for (auto& name : names)
                         {
-                            objectsSub.push_back({{"name", name}});
+                            nlohmann::json::object_t object;
+                            object["name"] = name;
+                            objectsSub.push_back(std::move(object));
                         }
                     }
                 };
diff --git a/include/persistent_data.hpp b/include/persistent_data.hpp
index 6d0f7c1..1ca925e 100644
--- a/include/persistent_data.hpp
+++ b/include/persistent_data.hpp
@@ -207,25 +207,25 @@
         const auto& c = SessionStore::getInstance().getAuthMethodsConfig();
         const auto& eventServiceConfig =
             EventServiceStore::getInstance().getEventServiceConfig();
-        nlohmann::json data{
-            {"auth_config",
-             {{"XToken", c.xtoken},
-              {"Cookie", c.cookie},
-              {"SessionToken", c.sessionToken},
-              {"BasicAuth", c.basic},
-              {"TLS", c.tls}}
+        nlohmann::json::object_t data;
+        nlohmann::json& authConfig = data["auth_config"];
 
-            },
-            {"eventservice_config",
-             {{"ServiceEnabled", eventServiceConfig.enabled},
-              {"DeliveryRetryAttempts", eventServiceConfig.retryAttempts},
-              {"DeliveryRetryIntervalSeconds",
-               eventServiceConfig.retryTimeoutInterval}}
+        authConfig["XToken"] = c.xtoken;
+        authConfig["Cookie"] = c.cookie;
+        authConfig["SessionToken"] = c.sessionToken;
+        authConfig["BasicAuth"] = c.basic;
+        authConfig["TLS"] = c.tls;
 
-            },
-            {"system_uuid", systemUuid},
-            {"revision", jsonRevision},
-            {"timeout", SessionStore::getInstance().getTimeoutInSeconds()}};
+        nlohmann::json& eventserviceConfig = data["eventservice_config"];
+        eventserviceConfig["ServiceEnabled"] = eventServiceConfig.enabled;
+        eventserviceConfig["DeliveryRetryAttempts"] =
+            eventServiceConfig.retryAttempts;
+        eventserviceConfig["DeliveryRetryIntervalSeconds"] =
+            eventServiceConfig.retryTimeoutInterval;
+
+        data["system_uuid"] = systemUuid;
+        data["revision"] = jsonRevision;
+        data["timeout"] = SessionStore::getInstance().getTimeoutInSeconds();
 
         nlohmann::json& sessions = data["sessions"];
         sessions = nlohmann::json::array();
@@ -234,16 +234,16 @@
             if (p.second->persistence !=
                 persistent_data::PersistenceType::SINGLE_REQUEST)
             {
-                sessions.push_back({
-                    {"unique_id", p.second->uniqueId},
-                    {"session_token", p.second->sessionToken},
-                    {"username", p.second->username},
-                    {"csrf_token", p.second->csrfToken},
-                    {"client_ip", p.second->clientIp},
+                nlohmann::json::object_t session;
+                session["unique_id"] = p.second->uniqueId;
+                session["session_token"] = p.second->sessionToken;
+                session["username"] = p.second->username;
+                session["csrf_token"] = p.second->csrfToken;
+                session["client_ip"] = p.second->clientIp;
 #ifdef BMCWEB_ENABLE_IBM_MANAGEMENT_CONSOLE
-                    {"client_id", p.second->clientId},
+                session["client_id"] = p.second->clientId;
 #endif
-                });
+                sessions.push_back(std::move(session));
             }
         }
         nlohmann::json& subscriptions = data["subscriptions"];
@@ -270,20 +270,23 @@
                 headers[std::move(name)] = header.value();
             }
 
-            subscriptions.push_back({
-                {"Id", subValue->id},
-                {"Context", subValue->customText},
-                {"DeliveryRetryPolicy", subValue->retryPolicy},
-                {"Destination", subValue->destinationUrl},
-                {"EventFormatType", subValue->eventFormatType},
-                {"HttpHeaders", std::move(headers)},
-                {"MessageIds", subValue->registryMsgIds},
-                {"Protocol", subValue->protocol},
-                {"RegistryPrefixes", subValue->registryPrefixes},
-                {"ResourceTypes", subValue->resourceTypes},
-                {"SubscriptionType", subValue->subscriptionType},
-                {"MetricReportDefinitions", subValue->metricReportDefinitions},
-            });
+            nlohmann::json::object_t subscription;
+
+            subscription["Id"] = subValue->id;
+            subscription["Context"] = subValue->customText;
+            subscription["DeliveryRetryPolicy"] = subValue->retryPolicy;
+            subscription["Destination"] = subValue->destinationUrl;
+            subscription["EventFormatType"] = subValue->eventFormatType;
+            subscription["HttpHeaders"] = std::move(headers);
+            subscription["MessageIds"] = subValue->registryMsgIds;
+            subscription["Protocol"] = subValue->protocol;
+            subscription["RegistryPrefixes"] = subValue->registryPrefixes;
+            subscription["ResourceTypes"] = subValue->resourceTypes;
+            subscription["SubscriptionType"] = subValue->subscriptionType;
+            subscription["MetricReportDefinitions"] =
+                subValue->metricReportDefinitions;
+
+            subscriptions.push_back(std::move(subscription));
         }
         persistentFile << data;
     }
