summaryrefslogtreecommitdiffstats
path: root/pkg/flatten/flatten.go
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 12:36:04 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 12:36:04 +0000
commitb09c6d56832eb1718c07d74abf3bc6ae3fe4e030 (patch)
treed2caec2610d4ea887803ec9e9c3cd77136c448ba /pkg/flatten/flatten.go
parentInitial commit. (diff)
downloadicingadb-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 '')
-rw-r--r--pkg/flatten/flatten.go30
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
+}