From 60896a318634a17a1d31b3be6d75dcd3dea55a50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohni=C4=87?= Date: Thu, 9 Feb 2023 17:35:14 +0100 Subject: [PATCH] Fix printing empty arrays as result of jq expressions --- pkg/jq/jq.go | 15 ++++++--------- pkg/jq/jq_test.go | 16 ++++++++++++++++ 2 files changed, 22 insertions(+), 9 deletions(-) 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{