Skip to content
/ fractal Public

Fractal is a Go package that makes it easy to work with dynamic and nested data types, with encoding/decoding support.

License

Notifications You must be signed in to change notification settings

ddliu/fractal

Repository files navigation

Fractal

Travis godoc License Go Report Card cover.run

Fractal is a Go package that makes it easy to work with dynamic and nested data types, with encoding/decoding support.

Features

  • Nested data type
  • Dot path support
  • JSON encoding/decoding
  • Simple template replacement
  • Inplace update
  • Common data type support: Struct, Map...

Install

go get -u github.com/ddliu/fractal

Usage

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; 

Dot Notation

  • a.b: Notation access
  • a.b.1: Array index
  • a.b.length(): Length of array or object

About

Fractal is a Go package that makes it easy to work with dynamic and nested data types, with encoding/decoding support.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Languages