diff --git a/core/io/json.cpp b/core/io/json.cpp index 858e6aa2061..59b1d4eb974 100644 --- a/core/io/json.cpp +++ b/core/io/json.cpp @@ -310,7 +310,6 @@ Error JSON::_parse_value(Variant &value, Token &token, const CharType *p_str, in if (err) return err; value = d; - return OK; } else if (token.type == TK_BRACKET_OPEN) { Array a; @@ -318,8 +317,6 @@ Error JSON::_parse_value(Variant &value, Token &token, const CharType *p_str, in if (err) return err; value = a; - return OK; - } else if (token.type == TK_IDENTIFIER) { String id = token.value; @@ -333,20 +330,18 @@ Error JSON::_parse_value(Variant &value, Token &token, const CharType *p_str, in r_err_str = "Expected 'true','false' or 'null', got '" + id + "'."; return ERR_PARSE_ERROR; } - return OK; - } else if (token.type == TK_NUMBER) { value = token.value; - return OK; } else if (token.type == TK_STRING) { value = token.value; - return OK; } else { r_err_str = "Expected value, got " + String(tk_name[token.type]) + "."; return ERR_PARSE_ERROR; } + + return OK; } Error JSON::_parse_array(Array &array, const CharType *p_str, int &index, int p_len, int &line, String &r_err_str) { @@ -473,5 +468,18 @@ Error JSON::parse(const String &p_json, Variant &r_ret, String &r_err_str, int & err = _parse_value(r_ret, token, str, idx, len, r_err_line, r_err_str); + // Check if EOF is reached + // or it's a type of the next token. + if (err == OK && idx < len) { + err = _get_token(str, idx, len, token, r_err_line, r_err_str); + + if (err || token.type != TK_EOF) { + r_err_str = "Expected 'EOF'"; + // Reset return value to empty `Variant` + r_ret = Variant(); + return ERR_PARSE_ERROR; + } + } + return err; }