【jqコマンド】jsonの要素を絞り込み
はじめに
お世話にになります、hosochinです
さて、今回は
「jqコマンド」でjsonを検索する
です
jqコマンドはjsonデータをデータ抽出, 変換, 集計してくれるツールです
今回はjqコマンドを使ったjsonデータの検索について、よく使いそうだなと思ったコマンドを載っけておこうと思います👍
公式ドキュメント はこちら
やってみる
JSONデータ
- 今回はこんな感じのjsonデータを用意しておきます
- 動物園jsonデータです
- “名前", “好物", “匹数", “肉食動物か否か", “草食動物か否か" のデータを保持しています
{
"zoo": [
{
"name": "ライオン",
"favoriteFood": "生肉",
"number": 1,
"carnivore": true,
"herbivore": false
},
{
"name": "チーター",
"favoriteFood": "生肉",
"number": 1,
"carnivore": true,
"herbivore": false
},
{
"name": "ゾウ",
"favoriteFood": "草",
"number": 2,
"carnivore": false,
"herbivore": true
},
{
"name": "サル",
"favoriteFood": "バナナ",
"number": 5,
"carnivore": true,
"herbivore": true
}
]
}
# zooの配列を取得
cat test.json | jq '[.zoo[]]'
# nameがライオンの動物を取得
# zooの配列の中からnameがライオンの要素を絞り込む
# mapは任意のフィルターについてjsonを返却する
cat test.json | jq '[.zoo[]]' | jq 'map(select( .name == "ライオン" ))'
[
{
"name": "ライオン",
"favoriteFood": "生肉",
"number": 1,
"carnivore": true,
"herbivore": false
}
]
# 好物が生肉の動物を取得
cat test.json | jq '[.zoo[]]' | jq 'map(select( .favoriteFood == "生肉" ))'
[
{
"name": "ライオン",
"favoriteFood": "生肉",
"number": 1,
"carnivore": true,
"herbivore": false
},
{
"name": "チーター",
"favoriteFood": "生肉",
"number": 1,
"carnivore": true,
"herbivore": false
}
]
# 2匹以上の動物を取得
# 数値の比較
cat test.json | jq '[.zoo[]]' | jq 'map(select( .number >= 2 ))'
[
{
"name": "ゾウ",
"favoriteFood": "草",
"number": 2,
"carnivore": false,
"herbivore": true
},
{
"name": "サル",
"favoriteFood": "バナナ",
"number": 5,
"carnivore": true,
"herbivore": true
}
]
# 肉食の動物を取得
# booleanの比較
cat test.json | jq '[.zoo[]]' | jq 'map(select( .carnivore == true ))'
[
{
"name": "ライオン",
"favoriteFood": "生肉",
"number": 1,
"carnivore": true,
"herbivore": false
},
{
"name": "チーター",
"favoriteFood": "生肉",
"number": 1,
"carnivore": true,
"herbivore": false
},
{
"name": "サル",
"favoriteFood": "バナナ",
"number": 5,
"carnivore": true,
"herbivore": true
}
]
# 肉食かつ草食の動物を取得
# and でAND条件で絞り込み
# or にすればOR条件で絞り込み
cat test.json | jq '[.zoo[]]' | jq 'map(select( .carnivore == true and .herbivore == true))'
[
{
"name": "サル",
"favoriteFood": "バナナ",
"number": 5,
"carnivore": true,
"herbivore": true
}
]
# 部分一致
# 名前に「イ」を含む動物を取得
cat test.json | jq '[.zoo[]]' | jq 'map(select( .name | contains("イ") ))'
[
{
"name": "ライオン",
"favoriteFood": "生肉",
"number": 1,
"carnivore": true,
"herbivore": false
}
]
まとめ
よく使いそうなコマンドだけ載せときました
jqコマンド自体よく使いますが、正直jsonを整形して出力する程度でしか使ってなかったです。。めっちゃ便利なんでもっと有効活用していきたいっすね〜
ディスカッション
コメント一覧
まだ、コメントがありません