@@ -547,7 +547,7 @@ func (v *TemplateVisitor) visit(obj types.JsonType, path string) (types.JsonType
547547}
548548
549549func (v * TemplateVisitor ) visitObject (obj * types.JsonObject , path string ) (types.JsonType , error ) {
550- var result = types .NewJsonObject ( )
550+ var result = types .NewJsonObjectWithCapacity ( obj . Size () )
551551 for _ , key := range obj .Keys () {
552552 err := checkDeadline (v .deadline )
553553 if err != nil {
@@ -687,7 +687,7 @@ func PutValue(result *types.JsonObject, key string, r types.JsonType, path strin
687687}
688688
689689func (v * TemplateVisitor ) visitArray (arr * types.JsonArray , path string ) (types.JsonType , error ) {
690- var result = make ([]types.JsonType , 0 )
690+ var result = make ([]types.JsonType , 0 , len ( arr . Value ) )
691691 for i , value := range arr .Value {
692692 err := checkDeadline (v .deadline )
693693 if err != nil {
@@ -705,7 +705,7 @@ func (v *TemplateVisitor) visitArray(arr *types.JsonArray, path string) (types.J
705705// Special visitor for cases when the array element is an object, that generates multiple values
706706func (v * TemplateVisitor ) visitArrayElement (array []types.JsonType , element types.JsonType , path string ) ([]types.JsonType , error ) {
707707 if obj , ok := element .(* types.JsonObject ); ok {
708- filteredKeys := make ([]string , 0 )
708+ filteredKeys := make ([]string , 0 , obj . Size () )
709709 for _ , key := range obj .Keys () {
710710 if key != "$assert" && key != "$comment" {
711711 filteredKeys = append (filteredKeys , key )
0 commit comments