2017-07-09 3 views
3

:上記のコードで`(。=" ["a"、 "b"] []) `述語はJQでどのように機能しますか?私はリテラルとして提供配列に基づいて、JSONのエントリを選択する方法を探しています

$ echo '["a","b","c","d"]' | jq '.[] | select (. == ["a","b"][])' 
"a" 
"b" 

、すべてのエントリが["a","b"]配列であるが選択されています。しかし、私は、述語がどのように詳細に機能しているのか分かりませんし、説明に感謝します。トリッキーな部分は==の右側です。

関連:

答えて

2

ここで理解するための鍵は、JQはストリーム指向であるということです。 ["a","b"][]はストリームを生成し、ストリームはストリームを生成する。 selectは、そのストリームの真理値を生成する項目を選択します。

jqがどのように機能するかを理解するには、しばしば物事を引き離すのに役立ちます。本発明の場合、あなたは試みることによって始めることができる:

echo '["a","b","c","d"]' | jq '.[] | (. == ["a","b"][])' 

debugは、例えば、も便利です

echo '["a","b","c","d"]' | jq '.[] | select(debug == ["a","b"][])' 
+1

ありがとうございました。配列から始めて、同じ結果の 'select(。==(" a "、" b "))'のためにコンマ演算子を使うこともできることが分かりました。それらのキーは、 '、'は実際にはデリミタではなく演算子であるということです。 –

+1

はい、次のように[1,2]を読むことができます:ストリームからリストを作成する:1,2 – peak

関連する問題