⚠️ NOTE:cq
is not under active development. Consider using the excellentbabashka
instead.⚠️
cq
provides similar functionality that jq
does for JSON: allowing one to interact with EDN files by performing queries and manipulating input/output as necessary using Clojure's syntax.
Tests are written with a combination of clojure.test
, matcher-combinators
and mockfn
.
kaocha
is set up to be used as the test runner, you can invoke it with lein kaocha
or just lein test
to run tests.
Clone this repository and run lein bin
to build a binary.
Then, copy the resulting binary a location in your $PATH
, for example:
lein bin
cp target/cq /usr/local/bin/cq
You can provide a Clojure function:
cq '(fn [data] (get-in data [:some :deep :nested :key]))' file.edn
You can get a single key from the map (which is just another Clojure function):
cq ':a-key' file.edn
You can also put your filter function in a file, using --from-file
(or -f
, for short):
cq -f very-complex.clj file.edn
You can provide a custom default data reader with the --default-reader-fn
(or -d
, for short) option. For example:
cq -d '(fn [tag input] (format "Custom reader: tag %s, input %s" tag input))'
You can also provide data readers for specific tags, like your own reader for #inst
, for example.
To do so, create a data_readers.clj
file and and use the --data-readers
option (or -r
, for short):
cq -r data_readers.clj identity file.edn