https://github.com/blues/jsonata-go
Open Source Go version of JSONata
https://github.com/blues/jsonata-go
Last synced: 5 months ago
JSON representation
Open Source Go version of JSONata
- Host: GitHub
- URL: https://github.com/blues/jsonata-go
- Owner: blues
- License: mit
- Created: 2021-04-22T16:27:20.000Z (about 5 years ago)
- Default Branch: main
- Last Pushed: 2025-05-20T21:57:25.000Z (about 1 year ago)
- Last Synced: 2025-12-26T17:50:41.017Z (6 months ago)
- Language: Go
- Size: 4.5 MB
- Stars: 78
- Watchers: 16
- Forks: 30
- Open Issues: 14
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# JSONata in Go
Package jsonata is a query and transformation language for JSON.
It's a Go port of the JavaScript library [JSONata](http://jsonata.org/).
It currently has feature parity with jsonata-js 1.5.4. As well as a most of the functions added in newer versions. You can see potentially missing functions by looking at the [jsonata-js changelog](https://github.com/jsonata-js/jsonata/blob/master/CHANGELOG.md).
## Install
go get github.com/blues/jsonata-go
## Usage
```Go
import (
"encoding/json"
"fmt"
"log"
jsonata "github.com/blues/jsonata-go"
)
const jsonString = `
{
"orders": [
{"price": 10, "quantity": 3},
{"price": 0.5, "quantity": 10},
{"price": 100, "quantity": 1}
]
}
`
func main() {
var data interface{}
// Decode JSON.
err := json.Unmarshal([]byte(jsonString), &data)
if err != nil {
log.Fatal(err)
}
// Create expression.
e := jsonata.MustCompile("$sum(orders.(price*quantity))")
// Evaluate.
res, err := e.Eval(data)
if err != nil {
log.Fatal(err)
}
fmt.Println(res)
// Output: 135
}
```
## JSONata Server
A locally hosted version of [JSONata Exerciser](http://try.jsonata.org/)
for testing is [available here](https://github.com/blues/jsonata-go/jsonata-server).
## JSONata tests
A CLI tool for running jsonata-go against the [JSONata test suite](https://github.com/jsonata-js/jsonata/tree/master/test/test-suite) is [available here](./jsonata-test).
## Contributing
We love issues, fixes, and pull requests from everyone. Please run the
unit-tests, staticcheck, and goimports prior to submitting your PR. By participating in this project, you agree to abide by
the Blues Inc [code of conduct](https://blues.github.io/opensource/code-of-conduct).
For details on contributions we accept and the process for contributing, see our
[contribution guide](CONTRIBUTING.md).
In addition to the Go unit tests there is also a test runner that will run against the jsonata-js test
suite in the [jsonata-test](./jsonata-test) directory. A number of these tests currently fail, but we're working towards feature parity with the jsonata-js reference implementation. Pull requests welcome!
If you would like to contribute to this library a good first issue would be to run the jsonata-test suite,
and fix any of the tests not passing.