https://github.com/ddliu/fractal
Fractal is a Go package that makes it easy to work with dynamic and nested data types, with encoding/decoding support.
https://github.com/ddliu/fractal
golang json map marshal path struct unmarshal
Last synced: 3 months ago
JSON representation
Fractal is a Go package that makes it easy to work with dynamic and nested data types, with encoding/decoding support.
- Host: GitHub
- URL: https://github.com/ddliu/fractal
- Owner: ddliu
- License: mit
- Created: 2018-11-11T05:00:05.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2020-05-25T11:35:43.000Z (about 6 years ago)
- Last Synced: 2025-01-03T01:21:39.014Z (over 1 year ago)
- Topics: golang, json, map, marshal, path, struct, unmarshal
- Language: Go
- Size: 18.6 KB
- Stars: 1
- Watchers: 3
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Fractal
[](https://travis-ci.org/ddliu/fractal)
[](https://godoc.org/github.com/ddliu/fractal)
[](LICENSE)
[](https://goreportcard.com/report/github.com/ddliu/fractal)
[](https://cover.run/go?tag=golang-1.10&repo=github.com%2Fddliu%2Ffractal)
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
```go
data := myStruct {
Key1: "Value1",
Key2: anotherStruct {
Key3: "Value3"
}
}
// Create context
ctx := fractal.New(data)
println(ctx.String("Key2.Key3"))
// output: Value3
```
Work with json
```go
ctx := fractal.FromJson([]byte(`{"key1": "value1", "key2": {"key3": "value3"}}`))
println(ctx.String("key2.key3"))
```
Or with JSON unmarshal
```go
var ctx fractal.Context
json.Unmarshal([]byte(`{"key1": "value1", "key2": {"key3": "value3"}}`), &ctx)
println(ctx.String("key2.key3"))
```
Work with map
```go
ctx := fractal.New(map[string]interface{
"key1": "value1",
"key2": "value2",
})
```
Update:
```go
ctx.SetValue("key2.new_key", 3)
```
Simple template:
```go
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