Hi gophers and other fellow life forms.
About 6 months ago we have started a new project that font-end side with JS
/Node.js
/React
and back-end side with Golang
. I was working for the back-end side everything was O.K. But the project grows the 'encoding/json'
package get inefficient. For example we are not able to change a 'key' or change any value with something else. Thats because we switch to some custom packages for manipulating JSON.
At this point. I figure out 'How about I wrote a packege for JSON manipulating'
And than I start working on it. But dealing with such a project was not easy.
First I had to find a way to validate my result. Manually writing unit tests was impossible for large data. Thats because I started to integrate Node.js to this project for test-case creation and validation. And it worked perfectly.
I use a continius integration platform for test automation. And wrote a detailed documentation on GoDoc.
And It has a cool gopher logo you should see :)
Well today its finally ready for public release.
Name of this package is JIN
It is super easy to use and much more important its super fast.
I just want to share with this to you guys.
Let's look at with an example.
// this is the JSON we will work on
data := []byte(`{"repo":{"name":"ecoshub/jin"},"others":["jin","dev.to"]}`)
we are going to try to access the 'dev.to' string in 'others' array.
// In order to Unmarshal a JSON.
// first we have to define those structs properly.
type Repository struct {
Name string `json:"name"`
}
type Data struct {
Repo Repository `json:"repo"`
Others []string `json:"others"`
}
// an empty data struct
var newData Data
// finally Unmarshaling.
err := json.Unmarshal(data, &newData)
// standard error implementation.
if err != nil {
fmt.Println("error:", err)
}
fmt.Prinln(newData.Others[1])
Or you can use this. with no struct defination.
// just one line of code.
value, err := jin.Get(data, "others", "1")
// standard error implementation.
if err != nil {
fmt.Println("error:", err)
}
fmt.Println(string(value))
Do not miss-understand me I am not the first person who figure out this simple and elegant definition. I am just trying to expand and improve JSON manipulation.
This package has over 90 functions/methods for ease JSON manipulation, build and formating needs. Some useful functions that i like to mention.
-Add()
, AddKeyValue()
, Set()
, SetKey()
Delete()
, Insert()
, IterateArray()
, IterateKeyValue()
Tree()
.
There is a very detailed explanations and lots of examples in GoDoc .
Also I think you have to check out benchmark results :)
This is the link of repository:
https://github.com/ecoshub/jin
Please do not hesitate to fork/clone pull-request.
Thank you so much for your time.
Have a good day.
Top comments (0)