[解決済み] jqで内部の配列の値に基づいてオブジェクトの配列をフィルタリングする方法は?
2022-03-15 12:31:49
質問
このような入力があった場合。
[
{
"Id": "cb94e7a42732b598ad18a8f27454a886c1aa8bbba6167646d8f064cd86191e2b",
"Names": [
"condescending_jones",
"loving_hoover"
]
},
{
"Id": "186db739b7509eb0114a09e14bcd16bf637019860d23c4fc20e98cbe068b55aa",
"Names": [
"foo_data"
]
},
{
"Id": "a4b7e6f5752d8dcb906a5901f7ab82e403b9dff4eaaeebea767a04bac4aada19",
"Names": [
"jovial_wozniak"
]
},
{
"Id": "76b71c496556912012c20dc3cbd37a54a1f05bffad3d5e92466900a003fbb623",
"Names": [
"bar_data"
]
}
]
でフィルタを構成しようとしている。
jq
を持つすべてのオブジェクトを返す
Id
は
しない
にデータが入っています。
Names
の配列で、出力は改行で区切られます。 上記のデータについて、私が望む出力は以下の通りです。
cb94e7a42732b598ad18a8f27454a886c1aa8bbba6167646d8f064cd86191e2b
a4b7e6f5752d8dcb906a5901f7ab82e403b9dff4eaaeebea767a04bac4aada19
これでなんとなく近づいた気がします。
(. - select(.Names[] contains("data"))) | .[] .Id
しかし
select
のフィルタが正しくなく、コンパイルされません(get
error: syntax error, unexpected IDENT
).
解決方法は?
あと少し あなたの
select
式では、パイプ (
|
の前に
contains
.
このフィルタは期待される出力を生成する。
. - map(select(.Names[] | contains ("data"))) | .[] .Id
は jq クックブック には、構文の例があります。
<ブロッククオートキーの内容に基づいてオブジェクトをフィルタリングする
例:ジャンルキーに "house" が含まれるオブジェクトだけが欲しい。
$ json='[{"genre":"deep house"}, {"genre": "progressive house"}, {"genre": "dubstep"}]'
$ echo "$json" | jq -c '.[] | select(.genre | contains("house"))'
{"genre":"deep house"}
{"genre":"progressive house"}
コリンD は、最終的な出力がJSONオブジェクトのストリームではなく、単一のJSON配列になるように、配列のJSON構造を保持する方法を尋ねています。
最も簡単な方法は、式全体を配列のコンストラクタでラップすることです。
$ echo "$json" | jq -c '[ .[] | select( .genre | contains("house")) ]'
[{"genre":"deep house"},{"genre":"progressive house"}]
また、map関数も使用できます。
$ echo "$json" | jq -c 'map(select(.genre | contains("house")))'
[{"genre":"deep house"},{"genre":"progressive house"}]
map は入力配列を展開し、各要素にフィルタを適用して新しい配列を作成します。つまり
map(f)
は、次のものと同等です。
[.[]|f]
.
関連
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] JavaScriptの配列で一意な値をすべて取得する(重複を排除する)。
-
[解決済み] JavaScriptのオブジェクトの配列からidでオブジェクトを検索する
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
-
[解決済み】配列に何かを追加する方法は?
-
[解決済み】オブジェクトの配列をプロパティ値でソートする
-
[解決済み] MATLABで、bsxfunを使うのはいつが最適ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Bashで文字列の配列をループする?
-
[解決済み] Swiftでindexとelementでループを反復させる方法
-
[解決済み] TypeScriptで配列の項目を削除するには?
-
[解決済み】数値の配列が与えられたとき、他のすべての数値の積の配列を返す(除算なし)
-
[解決済み] 配列からランダムに要素を選ぶ
-
[解決済み] 反復しながら値を変更する
-
[解決済み] 配列中の3つの要素のうち、和が与えられた数値に最も近いものを探す
-
[解決済み] bashで$@から最初の要素を削除する [重複] [重複
-
[解決済み] Swift。配列を参照で渡す?
-
[解決済み] 行列を1次元の配列に変換する。