I assume you are aware of jq
(a JSON processor to parse and manipulate JSON data right from your command line), and recently we have also written an article on jaq
(a superset of jq with additional features and improved performance), but today we bring to you a new tool named jnv
.
What is jnv?
jnv
is a CLI tool that works like jq
and inherits all the functionality of jq
but offers a unique interactive JSON viewer and jq
filter editor to apply and view changes instantly.
If you’re familiar with jq
, transitioning to jnv
requires no learning curve; it allows you to interact more dynamically with your JSON data and apply filters effortlessly, making it the best choice while working with the API, AWS CLI tool, Ansible, or Kubernetes.
This article will focus on the installation of jnv
on your preferred Linux distribution, with a few examples of usage. If you are very new to the topic of jnv
, jq
, or JSON processing, you might be unaware of the concept of filters used in them to slice, filter, map, and transform structured JSON data. So, do check out this quick and crisp jq cheatsheet.
How to Install jnv on Linux
The installation of jnv
is quite annoying; firstly, it’s not available in the Linux repository, and the options it offers are Cargo and Brew. I suggest using Brew to install it on Linux or macOS and trying to avoid Cargo, as you might encounter an error.
$ brew install jnv #On Linux or macOS via Brew
$ cargo install jnv #Via Cargo Package Manager
$ sudo port install jnv #On macOS via Port
$ nix-shell -p jnv #On NixOS
Once the installation is finished, the “jnv
” command will become accessible, and don’t worry, you don’t need to install jq
separately as it relies on j9 Rust bindings.
Usage of jnv
Once the installation is complete, you can use it to view JSON files in two different ways. For example, if you have a “data.json
” file, you can view it in the following two ways:
$ cat data.json | jnv
#OR
$ jnv data.json
However, if you have an API, you can make a first request using the curl command and then pipe the stdout data to jnv stdin.
$ curl https://api.github.com/users/octocat | jnv
Output:
From the jnv
interface, you can use “Up” and “Down” arrows key to go through with each entry in the output, “Tab” key to auto complete, or the “Enter” key to expand/collapse in JSON viewer.
At the top of the jnv
interface, you’ll find the jq
filter editor, which allows you to slice, filter, map, and transform structured JSON data in real-time.
As you can see, it works almost like jq
and allows for more interaction with JSON data. Almost all the functionality is the same; you can apply filters and see the results in real-time. All you need to learn are a few keybindings, which are provided below.
Key | Action |
---|---|
Ctrl + C | Exit jnv . |
Tab | jq filter auto-completion. |
← | Move the cursor one character to the left. |
→ | Move the cursor one character to the right. |
Ctrl + A | Move the cursor to the start of the filter. |
Ctrl + E | Move the cursor to the end of the filter. |
Backspace | Delete a character of the filter at the cursor position. |
Ctrl + U | Delete all characters from the filter. |
↑, Ctrl + K | Move the cursor one entry up in the JSON viewer. |
↓, Ctrl + J | Move the cursor one entry down in the JSON viewer. |
Ctrl + H | Move to the last entry in the JSON viewer. |
Ctrl + L | Move to the first entry in the JSON viewer. |
Enter | Toggle expand/collapse in the JSON viewer. |
Ctrl + P | Expand all folds in the JSON viewer. |
Ctrl + N | Collapse all folds in the JSON viewer. |
Alt + B | Move the cursor to the previous nearest character within set(. ,| ,( ,) ,[ ,] ). |
Alt + F | Move the cursor to the next nearest character within set(. ,| ,( ,) ,[ ,] ). |
Ctrl + W | Erase to the previous nearest character within set(. ,| ,( ,) ,[ ,] ). |
Alt + D | Erase to the next nearest character within set(. ,| ,( ,) ,[ ,] ). |
Once you’re familiar with the above keybindings, you’re good to use jnv
instead of jq
, as everything is almost the same. Here, I’ll end this article, but if you have any queries or questions related to the topic, then do let me know in the comment section.
Till then, peace!
Join The Conversation
Users are always welcome to leave comments about the articles, whether they are questions, comments, constructive criticism, old information, or notices of typos. Please keep in mind that all comments are moderated according to our comment policy.