https://github.com/cfhamlet/os-jsonbind
Bind data with JSON schema
https://github.com/cfhamlet/os-jsonbind
extractor json jsonschema
Last synced: 4 months ago
JSON representation
Bind data with JSON schema
- Host: GitHub
- URL: https://github.com/cfhamlet/os-jsonbind
- Owner: cfhamlet
- License: mit
- Created: 2021-11-03T14:30:12.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2021-11-15T13:18:08.000Z (over 4 years ago)
- Last Synced: 2024-06-20T00:33:54.163Z (about 2 years ago)
- Topics: extractor, json, jsonschema
- Language: Go
- Homepage:
- Size: 17.6 KB
- Stars: 3
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# os-jsonbind
Extract data with JSON schema
This library extend json schema, you can predefine standard json schema with extend tags, which can be used for extract data from source data(bytes) and create new data for json
## Install
```
go get github.com/cfhamlet/os-jsonbind
```
## Usage
* source data
```
srcData := []byte(`{"k1": 1, "k2": "v2", "k3": [2,3,4], "k4": {"i1": 5, "i2": true}}`) // json bytes
```
* define a json schema of the target object with "bind" key, value is path string of the source data
```
spec := []byte(`{"properties": {"K": {"type": "number", "bind": "k1"}}}`) // "k1" gjson style
```
* create a binder with the schema
```
import "github.com/cfhamlet/os-jsonbind"
binder, err := jsonbind.Compile(spec)
```
* extract data from source data, return target result, binded flag and error
```
result, binded, err := binder.Bind(context.Background(), srcData)
// result is map[string]interface{}{"K": 1}
// binded is true
// err is null
```
### Rule Syntax
The default rule type is [gjson](https://github.com/tidwall/gjson), you can specify other syntax with rule name as prefix
```
"bind": "ajson:$.k1"
```
Supported syntax rule types:
* ojg: https://github.com/oliveagle/jsonpath
* gval: https://github.com/PaesslerAG/gval
* gjson: https://github.com/tidwall/gjson
* ojson: https://github.com/oliveagle/jsonpath
* ajson: https://github.com/spyzhov/ajson
## License
MIT licensed.