Add support for [BODY] placeholder and basic JSON path support

Note that arrays are not currently supported, same with asterisks
This commit is contained in:
TwinProduction
2020-04-10 22:56:38 -04:00
parent 15b8f8a293
commit 3e2b56ba89
5 changed files with 134 additions and 19 deletions

30
jsonpath/jsonpath.go Normal file
View File

@ -0,0 +1,30 @@
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 ""
}