rss2twitter/vendor/github.com/dustin/go-jsonpointer/map.go
2018-12-05 00:15:53 -06:00

38 lines
648 B
Go

package jsonpointer
import (
"strconv"
"strings"
)
// Get the value at the specified path.
func Get(m map[string]interface{}, path string) interface{} {
if path == "" {
return m
}
parts := strings.Split(path[1:], "/")
var rv interface{} = m
for _, p := range parts {
switch v := rv.(type) {
case map[string]interface{}:
if strings.Contains(p, "~") {
p = strings.Replace(p, "~1", "/", -1)
p = strings.Replace(p, "~0", "~", -1)
}
rv = v[p]
case []interface{}:
i, err := strconv.Atoi(p)
if err == nil && i < len(v) {
rv = v[i]
} else {
return nil
}
default:
return nil
}
}
return rv
}