diff --git a/pkg/jq/jq.go b/pkg/jq/jq.go index b08c3ad..4e31b72 100644 --- a/pkg/jq/jq.go +++ b/pkg/jq/jq.go @@ -39,6 +39,8 @@ func Evaluate(input io.Reader, output io.Writer, expr string) error { return err } + enc := json.NewEncoder(output) + iter := code.Run(responseData) for { v, ok := iter.Next() @@ -53,18 +55,13 @@ func Evaluate(input io.Reader, output io.Writer, expr string) error { if err != nil { return err } - } else { - var jsonFragment []byte - jsonFragment, err = json.Marshal(v) + } else if tt, ok := v.([]interface{}); ok && tt == nil { + _, err = fmt.Fprint(output, "[]\n") if err != nil { return err } - _, err = output.Write(jsonFragment) - if err != nil { - return err - } - _, err = fmt.Fprint(output, "\n") - if err != nil { + } else { + if err = enc.Encode(v); err != nil { return err } } diff --git a/pkg/jq/jq_test.go b/pkg/jq/jq_test.go index ff96a2f..b7227fe 100644 --- a/pkg/jq/jq_test.go +++ b/pkg/jq/jq_test.go @@ -46,6 +46,22 @@ func TestEvaluate(t *testing.T) { }, wantW: "{\"login\":\"monalisa\"}\n", }, + { + name: "empty array", + args: args{ + json: strings.NewReader(`[]`), + expr: `.`, + }, + wantW: "[]\n", + }, + { + name: "empty array 2", + args: args{ + json: strings.NewReader(`[]`), + expr: `[]`, + }, + wantW: "[]\n", + }, { name: "complex", args: args{