https://github.com/antonmedv/gofx
🐾 fx-like command-line JSON processing tool
https://github.com/antonmedv/gofx
Last synced: 9 months ago
JSON representation
🐾 fx-like command-line JSON processing tool
- Host: GitHub
- URL: https://github.com/antonmedv/gofx
- Owner: antonmedv
- License: mit
- Archived: true
- Created: 2018-06-22T04:23:48.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2019-03-09T05:02:23.000Z (almost 7 years ago)
- Last Synced: 2024-11-05T21:45:13.750Z (about 1 year ago)
- Language: Go
- Homepage:
- Size: 8.79 KB
- Stars: 232
- Watchers: 5
- Forks: 11
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# gofx [](https://travis-ci.org/antonmedv/gofx)
[fx](https://github.com/antonmedv/fx)-like command-line JSON processing tool. This is implementation of some functionality of fx tool.
## Features
* Don't need to learn new syntax
* Written in Go
* Formatting and highlighting
## Differences
* Only ES5 (no arrow functions, no spread)
* Small binary size
* Can't use npm packages
## Install
```
$ go get github.com/antonmedv/gofx
```
Or download precompiled binary from [releases](https://github.com/antonmedv/gofx/releases) page.
## Usage
Pipe into `gofx` any JSON and JS code for reducing it.
```
$ gofx [code ...]
```
Pretty print JSON without passing any arguments:
```
$ echo '{"key":"value"}' | gofx
{
"key": "value"
}
```
### This Binding
You can get access to JSON by `this` keyword:
```
$ echo '{"foo": [{"bar": "value"}]}' | gofx 'this.foo[0].bar'
value
```
### Dot
It is possible to omit `this` keyword:
```
$ echo '{"foo": [{"bar": "value"}]}' | gofx .foo[0].bar
value
```
### Chain
You can pass any number of code blocks for reducing JSON:
```
$ echo '{"foo": [{"bar": "value"}]}' | gofx 'this.foo' 'this[0]' 'this.bar'
value
```
### Formatting
If you need something different then JSON (for example arguments for xargs) do not return anything from reducer.
`undefined` value printed into stderr by default.
```
$ echo '[]' | gofx 'void 0'
undefined
```
```
$ echo '[1,2,3]' | gofx 'this.forEach(function (x) { console.log(x) })' 2>/dev/null | xargs echo
1 2 3
```
### Modifying
To modify object use command separated by comma `,` and return `this` as the end.
```
$ echo '{"a": 2}' | gofx 'this["b"] = Math.pow(this.a, 10), this'
{
"a": 2,
"b": 1024
}
```
### Object keys
Get all object keys:
```
$ echo '{"foo": 1, "bar": 2}' | gofx 'Object.keys(this)'
[
"foo",
"bar"
]
```
By the way, gofx has shortcut for `Object.keys(this)`. Previous example can be rewritten as:
```
$ echo '{"foo": 1, "bar": 2}' | gofx ?
```
## Related
* [fx](https://github.com/antonmedv/fx) – original `fx` package
* [ymlx](https://github.com/matthewadams/ymlx) - `fx`-like YAML cli processor
## License
MIT