diff --git a/interpreter.go b/interpreter.go index 13c7460..7e9dab1 100644 --- a/interpreter.go +++ b/interpreter.go @@ -295,7 +295,7 @@ func (intr *treeInterpreter) Execute(node ASTNode, value interface{}) (interface if !ok { return nil, nil } - values := make([]interface{}, len(mapType)) + values := make([]interface{}, 0, len(mapType)) for _, value := range mapType { values = append(values, value) } diff --git a/interpreter_test.go b/interpreter_test.go index 76e0c5d..0637818 100644 --- a/interpreter_test.go +++ b/interpreter_test.go @@ -181,6 +181,15 @@ func TestCanSupportSliceOfStructsWithFunctions(t *testing.T) { assert.Equal(result.(float64), 2.0) } +func TestValueProjectionDoesNotEmitExtraNulls(t *testing.T) { + assert := assert.New(t) + var data interface{} + assert.Nil(json.Unmarshal([]byte(`{"a": "x", "b": "y"}`), &data)) + result, err := Search("*.to_string(@)", data) + assert.Nil(err) + assert.ElementsMatch([]interface{}{"x", "y"}, result) +} + func BenchmarkInterpretSingleFieldStruct(b *testing.B) { assert := assert.New(b) intr := newInterpreter()