Help us shape the future of Go! Take the 2026 Go Developer Survey

flat

package module
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 3, 2022 License: MIT Imports: 4 Imported by: 37

README

flat Build Status

Take a golang map and flatten it or unfatten a map with delimited key.

This work inspired by the nodejs flat package

Method

Flatten

Flatten given map, returns a map one level deep.

in := map[string]interface{}{
    "a": "b",
    "c": map[string]interface{}{
        "d": "e",
        "f": "g",
    },
    "z": [2, 1.4567],
}

out, err := flat.Flatten(in, nil)
// out = map[string]interface{}{
//     "a": "b",
//     "c.d": "e",
//     "c.f": "g",
//     "z.0": 2,
//     "z.1": 1.4567,
// }
Unflatten

Since there is flatten, flat should have unfatten.

in := map[string]interface{}{
    "foo.bar": map[string]interface{}{"t": 123},
    "foo":     map[string]interface{}{"k": 456},
}

out, err := flat.Unflatten(in, nil)
// out = map[string]interface{}{
//     "foo": map[string]interface{}{
//         "bar": map[string]interface{}{
//             "t": 123,
//         },
//         "k": 456,
//     },
// }

Options

Delimiter

Use a custom delimiter for flattening/unflattening your objects. Default value is ..

in := map[string]interface{}{
   "hello": map[string]interface{}{
       "world": map[string]interface{}{
           "again": "good morning",
        }
    },
}

out, err := flat.Flatten(in, &flat.Options{
    Delimiter: ":",
})
// out = map[string]interface{}{
//     "hello:world:again": "good morning",
// }
Safe

When Safe is true, fatten will preserve arrays and their contents. Default Safe value is false.

in := map[string]interface{}{
    "hello": map[string]interface{}{
        "world": []interface{}{
            "one",
            "two",
        }
   },
}

out, err := flat.Flatten(in, &flat.Options{
    Delimiter: ".",
    Safe:      true,
})
// out = map[string]interface{}{
//     "hello.world": []interface{}{"one", "two"},
// }
MaxDepth

MaxDepth is the maximum number of nested objects to flatten. MaxDepth can be any integer number. MaxDepth = 0 means no limit.

Default MaxDepth value is 0.

in := map[string]interface{}{
    "hello": map[string]interface{}{
        "world": []interface{}{
            "again": "good morning",
        }
   },
}

out, err := flat.Flatten(in, &flat.Options{
    Delimiter: ".",
    MaxDepth:  2,
})
// out = map[string]interface{}{
//     "hello.world": map[string]interface{}{"again": "good morning"},
// }

Todos

  • Safe option for Unflatten
  • Overwrite

Documentation

Overview

Package flat flattens a nested Golang map into a one level deep map. Flat also supports unflatten, turn a one level map into nested one.

You can flatten a Go map

in = map[string]interface{}{
    "foo": map[string]interface{}{
        "bar": map[string]interface{}{
            "t": 123,
        },
        "k": 456,
    },
}

out, err := flat.Flatten(in, nil)
// out = map[string]interface{}{
//     "foo.bar.t": 123,
//     "foo.k": 456,
// }

and a reverse with unflatten

in = map[string]interface{}{
    "foo.bar.t": 123,
    "foo.k": 456,
}
out, err := flat.Unflatten(in, nil)
// out = map[string]interface{}{
//     "foo": map[string]interface{}{
//         "bar": map[string]interface{}{
//             "t": 123,
//         },
//         "k": 456,
//     },
// }

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Flatten

func Flatten(nested map[string]interface{}, opts *Options) (m map[string]interface{}, err error)

Flatten the map, it returns a map one level deep regardless of how nested the original map was. By default, the flatten has Delimiter = ".", and no limitation of MaxDepth

func Unflatten

func Unflatten(flat map[string]interface{}, opts *Options) (nested map[string]interface{}, err error)

Unflatten the map, it returns a nested map of a map By default, the flatten has Delimiter = "."

Types

type Options

type Options struct {
	Prefix    string
	Delimiter string
	Safe      bool
	MaxDepth  int
}

Options the flatten options. By default: Delimiter = "."

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL