diff --git a/lib/JsonNode.cpp b/lib/JsonNode.cpp index d49f1e8b4..593cbdf19 100644 --- a/lib/JsonNode.cpp +++ b/lib/JsonNode.cpp @@ -310,63 +310,73 @@ JsonMap & JsonNode::Struct() const bool boolDefault = false; bool JsonNode::Bool() const { - if (getType() == JsonType::DATA_NULL) - return boolDefault; - assert(getType() == JsonType::DATA_BOOL); - return std::get(data); + assert(getType() == JsonType::DATA_NULL || getType() == JsonType::DATA_BOOL); + + if (getType() == JsonType::DATA_BOOL) + return std::get(data); + + return boolDefault; } const double floatDefault = 0; double JsonNode::Float() const { - if(getType() == JsonType::DATA_NULL) - return floatDefault; + assert(getType() == JsonType::DATA_NULL || getType() == JsonType::DATA_INTEGER || getType() == JsonType::DATA_FLOAT); + + if(getType() == JsonType::DATA_FLOAT) + return std::get(data); if(getType() == JsonType::DATA_INTEGER) return static_cast(std::get(data)); - assert(getType() == JsonType::DATA_FLOAT); - return std::get(data); + return floatDefault; } -const si64 integetDefault = 0; +const si64 integerDefault = 0; si64 JsonNode::Integer() const { - if(getType() == JsonType::DATA_NULL) - return integetDefault; + assert(getType() == JsonType::DATA_NULL || getType() == JsonType::DATA_INTEGER || getType() == JsonType::DATA_FLOAT); + + if(getType() == JsonType::DATA_INTEGER) + return std::get(data); if(getType() == JsonType::DATA_FLOAT) return static_cast(std::get(data)); - assert(getType() == JsonType::DATA_INTEGER); - return std::get(data); + return integerDefault; } const std::string stringDefault = std::string(); const std::string & JsonNode::String() const { - if (getType() == JsonType::DATA_NULL) - return stringDefault; - assert(getType() == JsonType::DATA_STRING); - return std::get(data); + assert(getType() == JsonType::DATA_NULL || getType() == JsonType::DATA_STRING); + + if (getType() == JsonType::DATA_STRING) + return std::get(data); + + return stringDefault; } const JsonVector vectorDefault = JsonVector(); const JsonVector & JsonNode::Vector() const { - if (getType() == JsonType::DATA_NULL) - return vectorDefault; - assert(getType() == JsonType::DATA_VECTOR); - return std::get(data); + assert(getType() == JsonType::DATA_NULL || getType() == JsonType::DATA_VECTOR); + + if (getType() == JsonType::DATA_VECTOR) + return std::get(data); + + return vectorDefault; } const JsonMap mapDefault = JsonMap(); const JsonMap & JsonNode::Struct() const { - if (getType() == JsonType::DATA_NULL) - return mapDefault; - assert(getType() == JsonType::DATA_STRUCT); - return std::get(data); + assert(getType() == JsonType::DATA_NULL || getType() == JsonType::DATA_STRUCT); + + if (getType() == JsonType::DATA_STRUCT) + return std::get(data); + + return mapDefault; } JsonNode & JsonNode::operator[](const std::string & child)