Fractal is a Go package that makes it easy to work with dynamic and nested data types, with encoding/decoding support.
- Nested data type
- Dot path support
- JSON encoding/decoding
- Simple template replacement
- Inplace update
- Common data type support: Struct, Map...
go get -u github.com/ddliu/fractal
Work with struct
data := myStruct {
Key1: "Value1",
Key2: anotherStruct {
Key3: "Value3"
}
}
// Create context
ctx := fractal.New(data)
println(ctx.String("Key2.Key3"))
// output: Value3
Work with json
ctx := fractal.FromJson([]byte(`{"key1": "value1", "key2": {"key3": "value3"}}`))
println(ctx.String("key2.key3"))
Or with JSON unmarshal
var ctx fractal.Context
json.Unmarshal([]byte(`{"key1": "value1", "key2": {"key3": "value3"}}`), &ctx)
println(ctx.String("key2.key3"))
Work with map
ctx := fractal.New(map[string]interface{
"key1": "value1",
"key2": "value2",
})
Update:
ctx.SetValue("key2.new_key", 3)
Simple template:
tpl := `Author: ${author.name}; License: ${license}; `
c := New(nil)
c.SetValue("author", map[string]string{
"name": "Dong",
"email": "test@example.com",
})
c.SetValue("license", "MIT")
println(c.Tpl(tpl))
// output: Author: Dong; License: MIT;
a.b
: Notation accessa.b.1
: Array indexa.b.length()
: Length of array or object