diff --git a/src/encoding/json/decode.go b/src/encoding/json/decode.go
index 01af489b563d53a6ae01d00aec949a87291147f6..7ad66cfeb615520eb1b998a7a95a6d28fdd887a0 100644
--- a/src/encoding/json/decode.go
+++ b/src/encoding/json/decode.go
@@ -540,17 +540,10 @@ func (d *decodeState) array(v reflect.Value) error {
 			break
 		}
 
-		// Get element of array, growing if necessary.
+		// Expand slice length, growing the slice if necessary.
 		if v.Kind() == reflect.Slice {
-			// Grow slice if necessary
 			if i >= v.Cap() {
-				newcap := v.Cap() + v.Cap()/2
-				if newcap < 4 {
-					newcap = 4
-				}
-				newv := reflect.MakeSlice(v.Type(), v.Len(), newcap)
-				reflect.Copy(newv, v)
-				v.Set(newv)
+				v.Grow(1)
 			}
 			if i >= v.Len() {
 				v.SetLen(i + 1)