1
0
Fork 0
mirror of https://github.com/TwiN/gatus.git synced 2024-12-14 11:58:04 +00:00
twin-gatus/jsonpath/jsonpath.go
TwinProduction 3e2b56ba89 Add support for [BODY] placeholder and basic JSON path support
Note that arrays are not currently supported, same with asterisks
2020-04-10 22:56:38 -04:00

30 lines
716 B
Go

package jsonpath
import (
"encoding/json"
"fmt"
"strings"
)
func Eval(path string, b []byte) string {
var object map[string]interface{}
err := json.Unmarshal(b, &object)
if err != nil {
return ""
}
return walk(path, object)
}
func walk(path string, object map[string]interface{}) string {
keys := strings.Split(path, ".")
targetKey := keys[0]
// if there's only one key and the target key is that key, then return its value
if len(keys) == 1 {
return fmt.Sprintf("%v", object[targetKey])
}
// if there's more than one key, then walk deeper
if len(keys) > 0 {
return walk(strings.Replace(path, fmt.Sprintf("%s.", targetKey), "", 1), object[targetKey].(map[string]interface{}))
}
return ""
}