json.go 595 B

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