diff --git a/monitor/json_parser.hpp b/monitor/json_parser.hpp
new file mode 100644
index 0000000..d632d1b
--- /dev/null
+++ b/monitor/json_parser.hpp
@@ -0,0 +1,45 @@
+/**
+ * Copyright © 2020 IBM Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#pragma once
+
+#include "json_config.hpp"
+
+#include <nlohmann/json.hpp>
+#include <sdbusplus/bus.hpp>
+
+namespace phosphor::fan::monitor
+{
+
+using json = nlohmann::json;
+
+constexpr auto confAppName = "monitor";
+constexpr auto confFileName = "config.json";
+
+/**
+ * @brief Get the JSON object
+ *
+ * @param[in] bus - The dbus bus object
+ *
+ * @return JSON object
+ *     A JSON object created after loading the JSON configuration file
+ */
+inline const json getJsonObj(sdbusplus::bus::bus& bus)
+{
+    return fan::JsonConfig::load(
+        fan::JsonConfig::getConfFile(bus, confAppName, confFileName));
+}
+
+} // namespace phosphor::fan::monitor
diff --git a/monitor/main.cpp b/monitor/main.cpp
index 74cc62d..e8b736b 100644
--- a/monitor/main.cpp
+++ b/monitor/main.cpp
@@ -13,8 +13,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
+#include "config.h"
+
 #include "argument.hpp"
 #include "fan.hpp"
+#ifdef MONITOR_USE_JSON
+#include "json_parser.hpp"
+#endif
 #include "fan_defs.hpp"
 #include "trust_manager.hpp"
 
@@ -53,13 +59,16 @@
         return 1;
     }
 
-    std::unique_ptr<phosphor::fan::trust::Manager> trust =
-        std::make_unique<phosphor::fan::trust::Manager>(trustGroups);
-
     // Attach the event object to the bus object so we can
     // handle both sd_events (for the timers) and dbus signals.
     bus.attach_event(event.get(), SD_EVENT_PRIORITY_NORMAL);
 
+#ifdef MONITOR_USE_JSON
+    // Get JSON object from monitor JSON config file
+    const auto& jsonObj = getJsonObj(bus);
+#else
+    auto trust = std::make_unique<phosphor::fan::trust::Manager>(trustGroups);
+
     for (const auto& fanDef : fanDefinitions)
     {
         // Check if a condition exists on the fan
@@ -75,6 +84,7 @@
         fans.emplace_back(
             std::make_unique<Fan>(mode, bus, event, trust, fanDef));
     }
+#endif
 
     if (mode == Mode::init)
     {
