json output a go

main
Bel LaPointe 2023-10-25 08:39:51 -06:00
parent 97c0b58bec
commit db4b1ca6ad
1 changed files with 26 additions and 2 deletions

View File

@ -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)
}
}