diff --git a/src/json.hpp b/src/json.hpp
index e91ed371..76e10c09 100644
--- a/src/json.hpp
+++ b/src/json.hpp
@@ -4716,9 +4716,9 @@ basic_json_parser_59:
                         get_token();
                         expect(lexer::token_type::name_separator);
 
-                        // parse value
+                        // parse and add value
                         get_token();
-                        result[key] = parse_internal();
+                        result.m_value.object->emplace(key, parse_internal());
                     }
                     while (last_token == lexer::token_type::value_separator);
 
@@ -4753,8 +4753,8 @@ basic_json_parser_59:
                             get_token();
                         }
 
-                        // parse value
-                        result.push_back(parse_internal());
+                        // parse and add value
+                        result.m_value.array->emplace_back(parse_internal());
                     }
                     while (last_token == lexer::token_type::value_separator);
 
diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c
index bd4ab7a5..eab94c89 100644
--- a/src/json.hpp.re2c
+++ b/src/json.hpp.re2c
@@ -4022,9 +4022,9 @@ class basic_json
                         get_token();
                         expect(lexer::token_type::name_separator);
 
-                        // parse value
+                        // parse and add value
                         get_token();
-                        result[key] = parse_internal();
+                        result.m_value.object->emplace(key, parse_internal());
                     }
                     while (last_token == lexer::token_type::value_separator);
 
@@ -4059,8 +4059,8 @@ class basic_json
                             get_token();
                         }
 
-                        // parse value
-                        result.push_back(parse_internal());
+                        // parse and add value
+                        result.m_value.array->emplace_back(parse_internal());
                     }
                     while (last_token == lexer::token_type::value_separator);