CLI to transform between JSON, EDN and Transit, powered with a minimal query language.
$ bash <(curl -s https://raw.githubusercontent.com/borkdude/jet/master/install)
$ echo '{:a 1}' | jet --to json
{"a":1}
This CLI is suited for shell-scripting because it has proper startup time.
The query language jet-lang is a minimal language for transformation of input, before writing out to JSON, EDN, or Transit.
The interactive shell enables you to learn jet-lang and work out the correctness of a query. It can also be useful on servers where you want to inspect data, but don't have REPL.
Linux and macOS binaries are provided via brew.
Install:
brew install borkdude/brew/jet
Upgrade:
brew upgrade jet
Install via the installer script:
$ bash <(curl -s https://raw.githubusercontent.com/borkdude/jet/master/install)
By default this will install into /usr/local/bin
. To change this, provide the directory name:
$ bash <(curl -s https://raw.githubusercontent.com/borkdude/jet/master/install) /tmp
You may also download a binary from Github.
This tool can also be used via the JVM. If you use leiningen, you can put the
following in your .lein/profiles
:
{:user
{:dependencies [[borkdude/jet "0.0.6"]]
:aliases {"jet" ["run" "-m" "jet.main"]}}}
And then call jet
like:
$ echo '["^ ","~:a",1]' | lein jet --from transit --to edn
{:a 1}
jet
supports the following options:
--from
: edn
, transit
or json
, defaults to edn
--to
: edn
, transit
or json
, defaults to edn
--keywordize
: if present, keywordizes JSON keys.--pretty
: if present, pretty-prints JSON and EDN output.--query
: given a jet-lang query, transforms input. See jet-lang docs.--collect
: given separate values, collects them in a vector.--version
: if present, prints current version of jet
and exits.Experimental:
--interactive
: if present, starts an interactive shell.Examples:
$ echo '{"a": 1}' | jet --from json --to edn
{"a" 1}
$ echo '{"a": 1}' | jet --from json --keywordize --to edn
{:a 1}
$ echo '{"a": 1}' | jet --from json --to transit
["^ ","a",1]
$ echo '[{:a {:b 1}} {:a {:b 2}}]' \
| jet --from edn --to edn --query '(filter (= [:a :b] #jet/lit 1))'
[{:a {:b 1}}]
$ curl -s https://api.github.com/repos/borkdude/clj-kondo/commits \
| jet --from json --keywordize --to edn \
--query '[0 {:sha :sha :date [:commit :author :date]}]'
{:sha "bde8b1cbacb2b44ad2cd57d5875338f0926c8c0b", :date "2019-08-05T21:11:56Z"}
Jet supports streaming over multiple values, without reading the entire input into memory:
$ echo '{"a": 1} {"a": 1}' | jet --from json --keywordize --query ':a' --to edn
1
1
When you want to collect multiple values into a vector, you can use --collect
:
$ echo '{"a": 1} {"a": 1}' | lein jet --from json --keywordize --collect --to edn
[{:a 1} {:a 1}]
When using --keywordize
and --to edn
ensure that your keys do not have
whitespace, as this will result in invalid EDN.
Test the JVM version:
script/test
Test the native version:
JET_TEST_ENV=native script/test
You will need leiningen and GraalVM.
script/compile
Do you enjoy this project? Consider buying me a hot beverage.
Copyright © 2019 Michiel Borkent
Distributed under the EPL License, same as Clojure. See LICENSE.
Can you improve this documentation?Edit on GitHub
cljdoc is a website building & hosting documentation for Clojure/Script libraries
× close