88 lines
3.1 KiB
Markdown
88 lines
3.1 KiB
Markdown
# Jsonvalue - A Fast and Convenient Alternation of Go map[string]interface{}
|
|
|
|
[](https://github.com/Andrew-M-C/go.jsonvalue/actions/workflows/go_test_general.yml)
|
|
[](https://codecov.io/gh/Andrew-M-C/go.jsonvalue)
|
|
[](https://goreportcard.com/report/github.com/Andrew-M-C/go.jsonvalue)
|
|
[](https://codebeat.co/projects/github-com-andrew-m-c-go-jsonvalue-master)
|
|
|
|
[](https://pkg.go.dev/github.com/Andrew-M-C/go.jsonvalue@v1.4.0)
|
|
[](https://github.com/Andrew-M-C/go.jsonvalue/tree/v1.4.0)
|
|
[](https://opensource.org/license/MIT)
|
|
|
|
- [Wiki](./docs/en/README.md)
|
|
- [中文版](./docs/zh-cn/README.md)
|
|
|
|
Package **jsonvalue** is for handling unstructured JSON data or customizing JSON marshaling. It is far more faster and convenient than using `interface{}` with `encoding/json`.
|
|
|
|
Please refer to [pkg site](https://pkg.go.dev/github.com/Andrew-M-C/go.jsonvalue) or [wiki](./docs/en/README.md) for detailed usage and examples.
|
|
|
|
Especially, please check for jsonvalue's [programming scenarios](./docs/en/10_scenarios.md).
|
|
|
|
## Import
|
|
|
|
Use following statements to import jsonvalue:
|
|
|
|
```go
|
|
import (
|
|
jsonvalue "github.com/Andrew-M-C/go.jsonvalue"
|
|
)
|
|
```
|
|
|
|
## Quick Start
|
|
|
|
Sometimes we want to create a complex JSON object like:
|
|
|
|
```json
|
|
{
|
|
"someObject": {
|
|
"someObject": {
|
|
"someObject": {
|
|
"message": "Hello, JSON!"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
With `jsonvalue`, It is quite simple to implement this:
|
|
|
|
```go
|
|
v := jsonvalue.NewObject()
|
|
v.MustSet("Hello, JSON").At("someObject", "someObject", "someObject", "message")
|
|
fmt.Println(v.MustMarshalString())
|
|
// Output:
|
|
// {"someObject":{"someObject":{"someObject":{"message":"Hello, JSON!"}}}
|
|
```
|
|
|
|
Similarly, it is quite easy to create sub-arrays like:
|
|
|
|
```json
|
|
[
|
|
{
|
|
"someArray": [
|
|
"Hello, JSON!"
|
|
]
|
|
}
|
|
]
|
|
```
|
|
|
|
```go
|
|
v := jsonvalue.NewArray()
|
|
v.MustSet("Hello, JSON").At(0, "someObject", 0)
|
|
fmt.Println(v.MustMarshalString())
|
|
// Output:
|
|
// [{"someObject":["Hello, JSON"]}]
|
|
```
|
|
|
|
In opposite, to parse and read the first JSON above, you can use jsonvalue like this:
|
|
|
|
```go
|
|
const raw = `{"someObject": {"someObject": {"someObject": {"message": "Hello, JSON!"}}}}`
|
|
s := jsonvalue.MustUnmarshalString(s).GetString("someObject", "someObject", "someObject", "message")
|
|
fmt.Println(s)
|
|
// Output:
|
|
// Hello, JSON!
|
|
```
|
|
|
|
However, it is quite complex and annoying in automatically creating array. I strongly suggest using `SetArray()` to create the array first, then use `Append()` or `Insert()` to set array elements. Please refer go [godoc](https://godoc.org/github.com/Andrew-M-C/go.jsonvalue) or [Wiki](./docs/en/README.md).
|