質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Q&A

解決済

2回答

1839閲覧

shellのjqコマンドでselectで絞り込んだ後に1件目のみ取得したい。

f6ae

総合スコア92

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

0グッド

0クリップ

投稿2022/05/20 15:54

shell

1json='[{"item_id":1,"name":"123"},{"item_id":2,"name":"234"},{"item_id":3,"name":"345"}]' 2echo $json | jq '.[] | select(.name | contains("34"))'

このように実行すると、

{ "item_id": 2, "name": "234" } { "item_id": 3, "name": "345" }

と結果が返ってきますが、このうちの1つ目のデータ、つまり

{ "item_id": 2, "name": "234" }

だけを取得したいと考えています。

shell

1json='[{"item_id":1,"name":"123"},{"item_id":2,"name":"234"},{"item_id":3,"name":"345"}]' 2echo \$json | jq '.[] | select(.name | contains("34")) | .[0]'

としてもselectで[ ]外れているためエラーになってしまいます。

selectの後に手動で[ ]をつけるなども出来ると思いますが、スマートでは無いと思います。
どのようにすればスマートに取得出来るでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

echo $json | jq '[.[] | select(.name | contains("34"))][0]'

でどうでしょう。


(コメントでの追加質問について)

上のコマンドで所望の1つの要素を抽出しているので、それを配列化する、という考え方でどうでしょうか。

echo $json | jq '[[.[] | select(.name | contains("34"))][0]]'

投稿2022/05/20 15:58

編集2022/05/20 16:10
dewa

総合スコア111

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

f6ae

2022/05/20 16:00

うまくいきました!どうも有難うございます!!
f6ae

2022/05/20 16:03

ベストアンサー後にすみません、もし可能であればご回答いただけると幸いなのですが、 ``` [ { "item_id": 2, "name": "234" } ] ``` このように[ ]を残した状態で1件目のみ取得するのは難しいでしょうか?
f6ae

2022/05/20 16:27

追加回答有難うございます! なるほど、理解しました!
guest

0

bash

1$ json='[{"item_id":1,"name":"123"},{"item_id":2,"name":"234"},{"item_id":3,"name":"345"}]' 2$ echo $json | jq 'map(select(.name | contains("34"))) | first' 3{ 4 "item_id": 2, 5 "name": "234" 6} 7 8$ echo $json | jq 'map(select(.name | contains("34"))) | [first]' 9[ 10 { 11 "item_id": 2, 12 "name": "234" 13 } 14]

投稿2022/05/20 16:10

編集2022/05/20 16:12
melian

総合スコア19749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

f6ae

2022/05/20 16:30

有難うございます! なるほど、mapとfirstというやり方もあるんですね。 うまくググれず見つけられなかったです。 勉強になります!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問