From db4b1ca6ada2fa7e1dd84ebffef031918fbfabd3 Mon Sep 17 00:00:00 2001 From: Bel LaPointe Date: Wed, 25 Oct 2023 08:39:51 -0600 Subject: [PATCH] json output a go --- cmd/clitest/main.go | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/cmd/clitest/main.go b/cmd/clitest/main.go index 70f46b2..36a2bf2 100644 --- a/cmd/clitest/main.go +++ b/cmd/clitest/main.go @@ -1,8 +1,10 @@ package main import ( + "encoding/json" "flag" "fmt" + "os" "sort" "strings" @@ -17,6 +19,7 @@ func main() { likeLedger := flag.Bool("like-ledger", false, "limit data to these -like-* rather than zoom to these -like-*") groupName := flag.String("group-name", ".*", "grouping to apply to names") groupDate := flag.String("group-date", ".*", "grouping to apply to dates") + jsonOutput := flag.Bool("json", false, "json output") flag.Parse() if flag.NArg() < 1 { @@ -45,6 +48,8 @@ func main() { like = append(like, ledger.LikeAfter(*likeAfter)) } + jsonResult := []any{} + switch *foo { case "reg": sort.Slice(deltas, func(i, j int) bool { @@ -53,7 +58,15 @@ func main() { register := deltas.Register() for i := range deltas { if like.All(deltas[i]) { - fmt.Printf("%s (%+v)\n", deltas[i].Debug(), register[deltas[i].Date][deltas[i].Name].Debug()) + if !*jsonOutput { + fmt.Printf("%s (%+v)\n", deltas[i].Debug(), register[deltas[i].Date][deltas[i].Name].Debug()) + } else { + jsonResult = append(jsonResult, map[string]any{ + "name": deltas[i].Name, + "delta": deltas[i], + "balance": register[deltas[i].Date][deltas[i].Name], + }) + } } } case "bal": @@ -64,10 +77,21 @@ func main() { results = append(results, fmt.Sprintf("%s %.2f", subk, subv)) } if len(results) > 0 { - fmt.Printf("%s\t%s\n", k, strings.Join(results, " + ")) + if !*jsonOutput { + fmt.Printf("%s\t%s\n", k, strings.Join(results, " + ")) + } else { + jsonResult = append(jsonResult, map[string]any{ + "name": k, + "balance": v, + }) + } } } default: panic(fmt.Errorf("not impl %q", flag.Args()[0])) } + + if *jsonOutput { + json.NewEncoder(os.Stdout).Encode(jsonResult) + } }