util: adds TraverseJSON

This commit is contained in:
stefanodvx 2025-04-14 15:24:06 +02:00
parent c4ec74872c
commit 401c0513a3
3 changed files with 52 additions and 0 deletions

49
util/traverse.go Normal file
View file

@ -0,0 +1,49 @@
package util
func TraverseJSON(
data interface{},
keys interface{},
) interface{} {
var keySlice []string
switch k := keys.(type) {
case string:
keySlice = []string{k}
case []string:
keySlice = k
default:
return nil // unsupported keys type
}
return traverseObject(data, keySlice)
}
func traverseObject(data interface{}, keys []string) interface{} {
if len(keys) == 0 {
return data
}
key := keys[0]
remainingKeys := keys[1:]
switch d := data.(type) {
case map[string]interface{}:
if value, exists := d[key]; exists {
return traverseObject(value, remainingKeys)
}
for _, value := range d {
result := traverseObject(value, keys)
if result != nil {
return result
}
}
case []interface{}:
for _, item := range d {
result := traverseObject(item, keys)
if result != nil {
return result
}
}
}
return nil
}