jqとは
jnvの前にjqとcurlについて少し説明します。(ご存知の方はここは読み飛ばしてください)
jqはターミナルで使用可能なJSONデータの操作や処理に特化したツールです。
Macの場合はHomebrewを使用すれば簡単にインストールできます。
brew install jq
jqでJSONデータを表示するにはcatコマンドを実行してからjqを実行します。
cat data.json | jq
実行すると以下のようにJSONデータが見られます。
cat data.json | jq
{
"id": 1,
"title": "iPhone 9",
"description": "An apple mobile which is nothing like apple",
"price": 549,
"discountPercentage": 12.96,
"rating": 4.69,
"stock": 94,
"brand": "Apple",
"category": "smartphones",
"thumbnail": "https://cdn.dummyjson.com/product-images/1/thumbnail.jpg",
"images": [
"https://cdn.dummyjson.com/product-images/1/1.jpg",
"https://cdn.dummyjson.com/product-images/1/2.jpg",
"https://cdn.dummyjson.com/product-images/1/3.jpg",
"https://cdn.dummyjson.com/product-images/1/4.jpg",
"https://cdn.dummyjson.com/product-images/1/thumbnail.jpg"
]
}
ローカルのJSONファイルではなく、サーバー上のJSONデータを確認したい場合は、curlコマンドを使用して以下のように実行します。
curl -s https://dummyjson.com/products/1 | jq
curlコマンドはオプションを「-o」にして、ファイル名を指定したあとにURLを実行するとJSONファイルをダウンロードできます。
curl -o data.json https://dummyjson.com/products/1
jnvとは
jnvは前述のjqにフィルター機能を付けたツールです。
jqと同じくHomebrewでインストールできます。
brew install ynqa/tap/jnv
JSONデータを確認したい場合はjqのようにcatコマンドを使わず、直接「jnv data.json」で確認できるので便利です。
jnv data.json
jnvコマンドを実行すると、「>>」が表示され、ここに「.images」のようにプロパティを入力するとフィルターをかけることができます。
jnvコマンドもcurlコマンドを併用することで、サーバー上のJSONデータを確認できます。
今回はjnvのフィルターの確認のため、「dummyjson.com/products/1」を「dummyjson.com/products」にします。(30件の商品データのダミーのJSONを取得します)
curl -s https://dummyjson.com/products | jnv
「.products[].title」のように入力してフィルターをかければ、30件の商品データのtitleにフィルターをかけて絞り込めます。
lengthで文字数をカウント
フィルターのあとに「 | length」を追記すれば文字数をカウントできます。
curl -s https://dummyjson.com/products | jnv
❯❯ .products[].title | length
8
8
18
7
10
// 以下略
フィルターのあとに「 | length >= 10」のように比較演算子を追記すれば文字数が10以上かboolean値で判定結果が表示されます。
curl -s https://dummyjson.com/products | jnv
❯❯ .products[].title | length >= 10
false
false
true
false
true
// 以下略
特定の文字列が含まれているか判定
フィルターのあとに「 | contains("iPhone")」を追記するとboolean値で判定結果が表示されます。
curl -s https://dummyjson.com/products | jnv
❯❯ .products[].title | contains("iPhone")
true
true
false
false
false
// 以下略
特定のプロパティで並び替える
JSONデータのpriceなどの特定のプロパティを並び替えて確認したい場合は、sort_by(.price)のようにプロパティを指定します。
さらに「 | reverse」をつけることで並び順が降順(高い順)になります。
curl -s https://dummyjson.com/products | jnv
❯❯ .products | sort_by(.price) | reverse
[
{
"id": 6,
"title": "MacBook Pro",
"description": "MacBook Pro 2021 with mini-LED display may launch between September, November",
"price": 1749,
// 中略
},
{
"id": 8,
"title": "Microsoft Surface Laptop 4",
"description": "Style and speed. Stand out on HD video calls backed by Studio Mics. Capture ideas on the vibrant touchscreen.",
"price": 1499,
// 中略
},
// 以下略
まとめ
ここまで見ていただいた通り、jnvはjqよりかなり使い勝手が良いツールとなっています。
length, contains, sort_by以外にフィルターで使えるものは、jq Manualに記載されていますので、こちらをご参照ください。
書き方が少し違うこともありますが、ある程度は互換性があります。
jqを使用されている方は使い勝手が良い、jnvに乗り換えることをオススメします。