diff --git a/src/AutoConnectElementJsonImpl.h b/src/AutoConnectElementJsonImpl.h index ad80497..ca3b3e2 100644 --- a/src/AutoConnectElementJsonImpl.h +++ b/src/AutoConnectElementJsonImpl.h @@ -60,7 +60,8 @@ void AutoConnectElementJson::_serialize(JsonObject& json) { */ void AutoConnectElementJson::_setMember(const JsonObject& json) { name = json.get(F(AUTOCONNECT_JSON_KEY_NAME)); - value = json.get(F(AUTOCONNECT_JSON_KEY_VALUE)); + if (json.containsKey(F(AUTOCONNECT_JSON_KEY_VALUE))) + value = json.get(F(AUTOCONNECT_JSON_KEY_VALUE)); } /** @@ -81,7 +82,8 @@ bool AutoConnectButtonJson::loadMember(const JsonObject& json) { String type = json.get(F(AUTOCONNECT_JSON_KEY_TYPE)); if (type.equalsIgnoreCase(F(AUTOCONNECT_JSON_TYPE_ACBUTTON))) { _setMember(json); - action = json.get(F(AUTOCONNECT_JSON_KEY_ACTION)); + if (json.containsKey(F(AUTOCONNECT_JSON_KEY_ACTION))) + action = json.get(F(AUTOCONNECT_JSON_KEY_ACTION)); return true; } return false; @@ -116,8 +118,10 @@ bool AutoConnectCheckboxJson::loadMember(const JsonObject& json) { String type = json.get(F(AUTOCONNECT_JSON_KEY_TYPE)); if (type.equalsIgnoreCase(F(AUTOCONNECT_JSON_TYPE_ACCHECKBOX))) { _setMember(json); - label = json.get(F(AUTOCONNECT_JSON_KEY_LABEL)); - checked = json.get(F(AUTOCONNECT_JSON_KEY_CHECKED)); + if (json.containsKey(F(AUTOCONNECT_JSON_KEY_LABEL))) + label = json.get(F(AUTOCONNECT_JSON_KEY_LABEL)); + if (json.containsKey(F(AUTOCONNECT_JSON_KEY_CHECKED))) + checked = json.get(F(AUTOCONNECT_JSON_KEY_CHECKED)); return true; } return false; @@ -154,9 +158,12 @@ bool AutoConnectInputJson::loadMember(const JsonObject& json) { String type = json.get(F(AUTOCONNECT_JSON_KEY_TYPE)); if (type.equalsIgnoreCase(F(AUTOCONNECT_JSON_TYPE_ACINPUT))) { _setMember(json); - label = json.get(F(AUTOCONNECT_JSON_KEY_LABEL)); - pattern = json.get(F(AUTOCONNECT_JSON_KEY_PATTERN)); - placeholder = json.get(F(AUTOCONNECT_JSON_KEY_PLACEHOLDER)); + if (json.containsKey(F(AUTOCONNECT_JSON_KEY_LABEL))) + label = json.get(F(AUTOCONNECT_JSON_KEY_LABEL)); + if (json.containsKey(F(AUTOCONNECT_JSON_KEY_PATTERN))) + pattern = json.get(F(AUTOCONNECT_JSON_KEY_PATTERN)); + if (json.containsKey(F(AUTOCONNECT_JSON_KEY_PLACEHOLDER))) + placeholder = json.get(F(AUTOCONNECT_JSON_KEY_PLACEHOLDER)); return true; } return false; @@ -193,17 +200,23 @@ bool AutoConnectRadioJson::loadMember(const JsonObject& json) { String type = json.get(F(AUTOCONNECT_JSON_KEY_TYPE)); if (type.equalsIgnoreCase(F(AUTOCONNECT_JSON_TYPE_ACRADIO))) { _setMember(json); - label = json.get(F(AUTOCONNECT_JSON_KEY_LABEL)); - checked = static_cast(json.get(F(AUTOCONNECT_JSON_KEY_CHECKED))); - String arrange = json.get(F(AUTOCONNECT_JSON_KEY_ARRANGE)); - if (arrange.equalsIgnoreCase(F(AUTOCONNECT_JSON_KEY_VERTICAL))) - order = AC_Vertical; - else if (arrange.equalsIgnoreCase(F(AUTOCONNECT_JSON_KEY_HORIZONTAL))) - order = AC_Horizontal; - empty(); - JsonArray& optionArray = json[AUTOCONNECT_JSON_KEY_VALUE]; - for (auto value : optionArray) - add(value.as()); + if (json.containsKey(F(AUTOCONNECT_JSON_KEY_LABEL))) + label = json.get(F(AUTOCONNECT_JSON_KEY_LABEL)); + if (json.containsKey(F(AUTOCONNECT_JSON_KEY_CHECKED))) + checked = static_cast(json.get(F(AUTOCONNECT_JSON_KEY_CHECKED))); + if (json.containsKey(F(AUTOCONNECT_JSON_KEY_ARRANGE))) { + String arrange = json.get(F(AUTOCONNECT_JSON_KEY_ARRANGE)); + if (arrange.equalsIgnoreCase(F(AUTOCONNECT_JSON_KEY_VERTICAL))) + order = AC_Vertical; + else if (arrange.equalsIgnoreCase(F(AUTOCONNECT_JSON_KEY_HORIZONTAL))) + order = AC_Horizontal; + } + if (json.containsKey(F(AUTOCONNECT_JSON_KEY_VALUE))) { + empty(); + JsonArray& optionArray = json[AUTOCONNECT_JSON_KEY_VALUE]; + for (auto value : optionArray) + add(value.as()); + } return true; } return false; @@ -249,12 +262,16 @@ bool AutoConnectSelectJson::loadMember(const JsonObject& json) { String type = json.get(F(AUTOCONNECT_JSON_KEY_TYPE)); if (type.equalsIgnoreCase(F(AUTOCONNECT_JSON_TYPE_ACSELECT))) { _setMember(json); - label = json.get(F(AUTOCONNECT_JSON_KEY_LABEL)); - empty(); - JsonArray& optionArray = json[AUTOCONNECT_JSON_KEY_OPTION]; - for (auto value : optionArray) - add(value.as()); - return true; + if (json.containsKey(F(AUTOCONNECT_JSON_KEY_LABEL))) { + label = json.get(F(AUTOCONNECT_JSON_KEY_LABEL)); + } + if (json.containsKey(F(AUTOCONNECT_JSON_KEY_OPTION))) { + empty(); + JsonArray& optionArray = json[AUTOCONNECT_JSON_KEY_OPTION]; + for (auto value : optionArray) + add(value.as()); + return true; + } } return false; } @@ -290,7 +307,8 @@ bool AutoConnectSubmitJson::loadMember(const JsonObject& json) { String type = json.get(F(AUTOCONNECT_JSON_KEY_TYPE)); if (type.equalsIgnoreCase(F(AUTOCONNECT_JSON_TYPE_ACSUBMIT))) { _setMember(json); - uri = json.get(F(AUTOCONNECT_JSON_KEY_URI)); + if (json.containsKey(F(AUTOCONNECT_JSON_KEY_URI))) + uri = json.get(F(AUTOCONNECT_JSON_KEY_URI)); return true; } return false; @@ -325,7 +343,8 @@ bool AutoConnectTextJson::loadMember(const JsonObject& json) { String type = json.get(F(AUTOCONNECT_JSON_KEY_TYPE)); if (type.equalsIgnoreCase(F(AUTOCONNECT_JSON_TYPE_ACTEXT))) { _setMember(json); - style = json.get(F(AUTOCONNECT_JSON_KEY_STYLE)); + if (json.containsKey(F(AUTOCONNECT_JSON_KEY_STYLE))) + style = json.get(F(AUTOCONNECT_JSON_KEY_STYLE)); return true; } return false;