Documentation ¶
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var DefaultTokenizer = StringTokenizer(".")
DefaultTokenizer is a tokenizer using a dot or fullstop
Functions ¶
This section is empty.
Types ¶
type Map ¶
type Map struct {
// contains filtered or unexported fields
}
Map is a flatten map
Example ¶
sample := map[string]interface{}{ "supu": 42, "tupu": false, "foo": "bar", "aa": 23, "a": map[string]interface{}{ "aa": 23, "ac": 23, "abc": 23, "a": map[string]interface{}{ "a": map[string]interface{}{ "b": true, "c": 42, "d": "tupu", }, "b": true, "c": 42, "d": "tupu", }, "ab": map[string]interface{}{ "b": true, "c": 42, "d": "tupu", }, "b": true, "c": 42, "d": "tupu", "collection": []interface{}{ map[string]interface{}{ "b": false, "d": "aaaa", "dx": "foobar", }, map[string]interface{}{ "b": true, "c": 42, "d": "tupu", }, }, "collection2": []interface{}{ map[string]interface{}{ "d": []interface{}{ map[string]interface{}{ "a": 1, "d": []int{1, 2, 3, 4, 5}, }, map[string]interface{}{ "d": []int{1, 2, 3, 4, 5}, }, map[string]interface{}{ "d": []int{1, 2, 3, 4, 5}, }, }, }, map[string]interface{}{ "d": []int{1, 2, 3, 4, 5}, }, map[string]interface{}{ "d": []int{1, 2, 3, 4, 5}, }, }, }, } flatten, _ := Flatten(sample, DefaultTokenizer) flatten.Del("a.b") flatten.Del("a.*.a") flatten.Del("a.collection.1.b") flatten.Del("a.collection.*.d") flatten.Del("a.collection2.*.d.*.d") flatten.Move("tupu", "tuputupu") flatten.Move("a.c", "a.cb") flatten.Move("a.a", "acb") flatten.Del("a.ab") res := flatten.Expand() b, _ := json.MarshalIndent(res, "", "\t") fmt.Println(string(b))
Output: { "a": { "aa": 23, "abc": 23, "ac": 23, "cb": 42, "collection": [ { "b": false, "dx": "foobar" }, { "c": 42 } ], "collection2": [ { "d": [ { "a": 1 }, null, null ] }, { "d": [ 1, 2, 3, 4, 5 ] }, { "d": [ 1, 2, 3, 4, 5 ] } ], "d": "tupu" }, "aa": 23, "acb": { "b": true, "c": 42, "d": "tupu" }, "foo": "bar", "supu": 42, "tuputupu": false }
func Flatten ¶
Flatten takes a hierarchy and flatten it using the tokenizer supplied
Example ¶
sample := map[string]interface{}{ "supu": 42, "tupu": false, "foo": "bar", "a": map[string]interface{}{ "b": true, "c": 42, "d": "tupu", }, "collection": []interface{}{ map[string]interface{}{ "b": false, "d": "foobar", }, map[string]interface{}{ "b": true, "c": 42, "d": "tupu", }, }, } res, _ := Flatten(sample, DefaultTokenizer) b, _ := json.MarshalIndent(res.m, "", "\t") fmt.Println(string(b))
Output: { "a.b": true, "a.c": 42, "a.d": "tupu", "collection.#": 2, "collection.0.b": false, "collection.0.d": "foobar", "collection.1.b": true, "collection.1.c": 42, "collection.1.d": "tupu", "foo": "bar", "supu": 42, "tupu": false }
Example (Collection) ¶
sample := map[string]interface{}{ "a": []interface{}{ map[string]interface{}{ "b": []interface{}{ map[string]interface{}{ "c": map[string]interface{}{ "a": 1, }, "aa": 1, }, map[string]interface{}{ "c": map[string]interface{}{ "a": 2, }, "aa": 1, }, }, "aa": 1, }, map[string]interface{}{ "b": []interface{}{ map[string]interface{}{ "c": map[string]interface{}{ "a": 1, }, "aa": 1, }, }, "aa": 1, }, }, "tupu": false, } res, _ := Flatten(sample, DefaultTokenizer) b, _ := json.MarshalIndent(res.m, "", "\t") fmt.Println(string(b))
Output: { "a.#": 2, "a.0.aa": 1, "a.0.b.#": 2, "a.0.b.0.aa": 1, "a.0.b.0.c.a": 1, "a.0.b.1.aa": 1, "a.0.b.1.c.a": 2, "a.1.aa": 1, "a.1.b.#": 1, "a.1.b.0.aa": 1, "a.1.b.0.c.a": 1, "tupu": false }
type StringTokenizer ¶
type StringTokenizer string
StringTokenizer is a Tokenizer using the string as separator
func (StringTokenizer) Keys ¶
func (s StringTokenizer) Keys(ks string) []string
Keys returns the keys contained in the received token
func (StringTokenizer) Separator ¶
func (s StringTokenizer) Separator() string
Separator returns the separator
func (StringTokenizer) Token ¶
func (s StringTokenizer) Token(ks []string) string
Token returns a token joining all the keys with s as separator
Click to show internal directories.
Click to hide internal directories.