diff --git a/control/json/fan.cpp b/control/json/fan.cpp
index b2f152c..4512f49 100644
--- a/control/json/fan.cpp
+++ b/control/json/fan.cpp
@@ -16,15 +16,71 @@
 #include "fan.hpp"
 
 #include <nlohmann/json.hpp>
+#include <phosphor-logging/log.hpp>
 #include <sdbusplus/bus.hpp>
 
 namespace phosphor::fan::control::json
 {
 
 using json = nlohmann::json;
+using namespace phosphor::logging;
 
 Fan::Fan(sdbusplus::bus::bus& bus, const json& jsonObj) :
     ConfigBase(jsonObj), _bus(bus)
-{}
+{
+    setProfiles(jsonObj);
+    setZone(jsonObj);
+    setSensors(jsonObj);
+    setInterface(jsonObj);
+}
+
+void Fan::setProfiles(const json& jsonObj)
+{
+    _profiles = {};
+    if (jsonObj.contains("profiles"))
+    {
+        for (const auto& profile : jsonObj["profiles"])
+        {
+            _profiles.emplace_back(profile.get<std::string>());
+        }
+    }
+}
+
+void Fan::setZone(const json& jsonObj)
+{
+    if (!jsonObj.contains("zone"))
+    {
+        log<level::ERR>("Missing required fan zone",
+                        entry("JSON=%s", jsonObj.dump().c_str()));
+        throw std::runtime_error("Missing required fan zone");
+    }
+    _zone = jsonObj["zone"].get<std::string>();
+}
+
+void Fan::setSensors(const json& jsonObj)
+{
+    if (!jsonObj.contains("sensors"))
+    {
+        log<level::ERR>("Missing required fan sensors list",
+                        entry("JSON=%s", jsonObj.dump().c_str()));
+        throw std::runtime_error("Missing required fan sensors list");
+    }
+    for (const auto& sensor : jsonObj["sensors"])
+    {
+        _sensors.emplace_back(sensor.get<std::string>());
+    }
+}
+
+void Fan::setInterface(const json& jsonObj)
+{
+    if (!jsonObj.contains("target_interface"))
+    {
+        log<level::ERR>("Missing required fan sensor target interface",
+                        entry("JSON=%s", jsonObj.dump().c_str()));
+        throw std::runtime_error(
+            "Missing required fan sensor target interface");
+    }
+    _interface = jsonObj["target_interface"].get<std::string>();
+}
 
 } // namespace phosphor::fan::control::json
diff --git a/control/json/fan.hpp b/control/json/fan.hpp
index bd95160..63d975c 100644
--- a/control/json/fan.hpp
+++ b/control/json/fan.hpp
@@ -125,6 +125,45 @@
      * to use in controlling the fan's speed
      */
     std::string _interface;
+
+    /**
+     * @brief Parse and set the fan's profiles
+     *
+     * @param[in] jsonObj - JSON object for the fan
+     *
+     * Sets the list of profiles this fan belongs to if any are configured,
+     * otherwise an empty list of profiles results in the fan always being
+     * included in the zone.
+     */
+    void setProfiles(const json& jsonObj);
+
+    /**
+     * @brief Parse and set the fan's zone
+     *
+     * @param[in] jsonObj - JSON object for the fan
+     *
+     * Sets the zone this fan is included in.
+     */
+    void setZone(const json& jsonObj);
+
+    /**
+     * @brief Parse and set the fan's sensor list
+     *
+     * @param[in] jsonObj - JSON object for the fan
+     *
+     * Sets the list of sensors that contain a `Target` property on dbus
+     * that make up this fan.
+     */
+    void setSensors(const json& jsonObj);
+
+    /**
+     * @brief Parse and set the fan's sensor interface
+     *
+     * @param[in] jsonObj - JSON object for the fan
+     *
+     * Sets the sensor interface to use when setting the `Target` property
+     */
+    void setInterface(const json& jsonObj);
 };
 
 } // namespace phosphor::fan::control::json
