| # flatted (Go) |
| |
| A super light and fast circular JSON parser. |
| |
| ## Usage |
| |
| ```go |
| package main |
| |
| import ( |
| "fmt" |
| "github.com/WebReflection/flatted/golang/pkg/flatted" |
| ) |
| |
| type Group struct { |
| Name string `json:"name"` |
| } |
| |
| type User struct { |
| Name string `json:"name"` |
| Friend *User `json:"friend"` |
| Group *Group `json:"group"` |
| } |
| |
| func main() { |
| group := &Group{Name: "Developers"} |
| alice := &User{Name: "Alice", Group: group} |
| bob := &User{Name: "Bob", Group: group} |
| |
| alice.Friend = bob |
| bob.Friend = alice // Circular reference |
| |
| // Stringify Alice |
| s, _ := flatted.Stringify(alice) |
| fmt.Println(s) |
| // Output: [{"name":"Alice","friend":"1","group":"2"},{"name":"Bob","friend":"0","group":"2"},{"name":"Developers"}] |
| |
| // Flattening in action: |
| // Index "0" is Alice, Index "1" is Bob, Index "2" is the shared Group. |
| |
| // Parse back into a generic map structure |
| res, _ := flatted.Parse(s) |
| aliceMap := res.(map[string]any) |
| fmt.Println(aliceMap["name"]) // Alice |
| } |
| ``` |
| |
| ## CLI |
| |
| Build the binary using the provided Makefile: |
| |
| ```bash |
| make build |
| ``` |
| |
| Then use it to parse flatted JSON from stdin: |
| |
| ```bash |
| echo '[{"a":"1"},"b"]' | ./flatted |
| ``` |