diff --git a/extmod/modujson.c b/extmod/modujson.c
index 830b588fdc98f4bd7f2bfd4d24ada91a83c375c8..f5c6428ef9c167965d61c65ad43c2e3e3c096951 100644
--- a/extmod/modujson.c
+++ b/extmod/modujson.c
@@ -185,7 +185,7 @@ STATIC mp_obj_t mod_ujson_load(mp_obj_t stream_obj) {
                     cur = S_CUR(s);
                     if (cur == '.' || cur == 'E' || cur == 'e') {
                         flt = true;
-                    } else if (cur == '-' || unichar_isdigit(cur)) {
+                    } else if (cur == '+' || cur == '-' || unichar_isdigit(cur)) {
                         // pass
                     } else {
                         break;
diff --git a/tests/extmod/ujson_loads_float.py b/tests/extmod/ujson_loads_float.py
index f1b8cc364c4ac45741bc11e1ee37f4a8b2e7639f..086853a2d45400d07e05d39dabbcdaef9cb73795 100644
--- a/tests/extmod/ujson_loads_float.py
+++ b/tests/extmod/ujson_loads_float.py
@@ -14,4 +14,5 @@ my_print(json.loads('1.2'))
 my_print(json.loads('1e2'))
 my_print(json.loads('-2.3'))
 my_print(json.loads('-2e3'))
+my_print(json.loads('-2e+3'))
 my_print(json.loads('-2e-3'))