json.go 577 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. package main
  2. import (
  3. "encoding/json"
  4. "flag"
  5. "fmt"
  6. "log"
  7. "os"
  8. "strconv"
  9. "strings"
  10. )
  11. func main() {
  12. log.SetFlags(0)
  13. flag.Parse()
  14. path := strings.Split(flag.Arg(0), "/")
  15. var obj map[string]interface{}
  16. dec := json.NewDecoder(os.Stdin)
  17. dec.UseNumber()
  18. dec.Decode(&obj)
  19. var v interface{} = obj
  20. for _, p := range path {
  21. switch tv := v.(type) {
  22. case map[string]interface{}:
  23. v = tv[p]
  24. case []interface{}:
  25. i, err := strconv.Atoi(p)
  26. if err != nil {
  27. log.Fatal(err)
  28. }
  29. v = tv[i]
  30. default:
  31. return // Silence is golden
  32. }
  33. }
  34. fmt.Println(v)
  35. }