jsonpretty.go 876 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "io/ioutil"
  6. "os"
  7. )
  8. func main() {
  9. if len(os.Args) < 2 {
  10. fmt.Printf("usage: jsonpretty input.json [output.json]\n")
  11. os.Exit(1)
  12. }
  13. buf, err := ioutil.ReadFile(os.Args[1])
  14. if err != nil {
  15. fmt.Printf("%v\n", err)
  16. os.Exit(1)
  17. }
  18. var jsmap map[string]interface{}
  19. if err := json.Unmarshal(buf, &jsmap); err != nil {
  20. fmt.Printf("%v\n", err)
  21. os.Exit(1)
  22. }
  23. for key, val := range jsmap {
  24. switch tval := val.(type) {
  25. case map[string]interface{}:
  26. if len(tval) == 0 {
  27. delete(jsmap, key)
  28. }
  29. case []interface{}:
  30. if len(tval) == 0 {
  31. delete(jsmap, key)
  32. }
  33. }
  34. }
  35. buf, err = json.MarshalIndent(jsmap, "", "\t")
  36. if err != nil {
  37. fmt.Printf("%v\n", err)
  38. os.Exit(1)
  39. }
  40. buf = append(buf, '\n')
  41. if len(os.Args) == 3 {
  42. ioutil.WriteFile(os.Args[2], buf, 0666)
  43. } else {
  44. os.Stdout.Write(buf)
  45. }
  46. }