diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 12:36:04 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 12:36:04 +0000 |
commit | b09c6d56832eb1718c07d74abf3bc6ae3fe4e030 (patch) | |
tree | d2caec2610d4ea887803ec9e9c3cd77136c448ba /pkg/flatten/flatten.go | |
parent | Initial commit. (diff) | |
download | icingadb-upstream.tar.xz icingadb-upstream.zip |
Adding upstream version 1.1.0.upstream/1.1.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'pkg/flatten/flatten.go')
-rw-r--r-- | pkg/flatten/flatten.go | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/pkg/flatten/flatten.go b/pkg/flatten/flatten.go new file mode 100644 index 0000000..a31705b --- /dev/null +++ b/pkg/flatten/flatten.go @@ -0,0 +1,30 @@ +package flatten + +import ( + "strconv" +) + +// Flatten creates flat, one-dimensional maps from arbitrarily nested values, e.g. JSON. +func Flatten(value interface{}, prefix string) map[string]interface{} { + var flatten func(string, interface{}) + flattened := make(map[string]interface{}) + + flatten = func(key string, value interface{}) { + switch value := value.(type) { + case map[string]interface{}: + for k, v := range value { + flatten(key+"."+k, v) + } + case []interface{}: + for i, v := range value { + flatten(key+"["+strconv.Itoa(i)+"]", v) + } + default: + flattened[key] = value + } + } + + flatten(prefix, value) + + return flattened +} |