Documentation ¶
Overview ¶
Flatten makes flat, one-dimensional maps from arbitrarily nested ones.
It turns map keys into compound names, in four styles: dotted (`a.b.1.c`), path-like (`a/b/1/c`), Rails (`a[b][1][c]`), or with underscores (`a_b_1_c`). It takes input as either JSON strings or Go structures. It knows how to traverse these JSON types: objects/maps, arrays and scalars.
You can flatten JSON strings.
nested := `{ "one": { "two": [ "2a", "2b" ] }, "side": "value" }` flat, err := flatten.FlattenString(nested, "", flatten.DotStyle) // output: `{ "one.two.0": "2a", "one.two.1": "2b", "side": "value" }`
Or Go maps directly.
nested := map[string]interface{}{ "a": "b", "c": map[string]interface{}{ "d": "e", "f": "g", }, "z": 1.4567, } flat, err := flatten.Flatten(nested, "", flatten.RailsStyle) // output: // map[string]interface{}{ // "a": "b", // "c[d]": "e", // "c[f]": "g", // "z": 1.4567, // }
Index ¶
Constants ¶
This section is empty.
Variables ¶
var NotValidInputError = errors.New("Not a valid input: map or slice")
Nested input must be a map or slice
Functions ¶
func Flatten ¶
func Flatten(nested map[string]interface{}, prefix string, style SeparatorStyle) (map[string]interface{}, error)
Flatten generates a flat map from a nested one. The original may include values of type map, slice and scalar, but not struct. Keys in the flat map will be a compound of descending map keys and slice iterations. The presentation of keys is set by style. A prefix is joined to each key.
func FlattenString ¶
func FlattenString(nestedstr, prefix string, style SeparatorStyle) (string, error)
FlattenString generates a flat JSON map from a nested one. Keys in the flat map will be a compound of descending map keys and slice iterations. The presentation of keys is set by style. A prefix is joined to each key.
Types ¶
type SeparatorStyle ¶
type SeparatorStyle int
The presentation style of keys.
const ( // Separate nested key components with dots, e.g. "a.b.1.c.d" DotStyle SeparatorStyle // Separate with path-like slashes, e.g. a/b/1/c/d PathStyle // Separate ala Rails, e.g. "a[b][c][1][d]" RailsStyle // Separate with underscores, e.g. "a_b_1_c_d" UnderscoreStyle )