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.