配列があり、その配列に要素が存在するかどうかを確認するか、jq、fruit.jsonを使用して配列からその要素を取得する必要があります。
{
"fruit": [
"Apple",
"orange",
"pomegranate",
"apricot",
"mango"
]
}
cat fruit.json | jq '.fruit .Apple'
動作しません
「含む」のセマンティクスはまったく簡単ではありません。一般的に、配列に特定の値があるかどうかをテストするには、「インデックス」を使用する方が良いでしょう。
.fruit | index( "orange" )
JqにIN/1
がある場合、より良い解決策はそれを使用することです:
.fruit as $f | "orange" | IN($f[])
Jqにfirst/1
がある場合(jq 1.5と同様)、使用するIN/1
の高速定義は次のとおりです。
def IN(s): first((s == .) // empty) // false;
[警告:コメントと代替案をご覧ください。]
cat fruit.json | jq '.fruit | contains(["orange"])'
配列jq
が"Apple"
を含む場合にfruit
が成功を返し、そうでない場合はエラーを返します。
jq -e '.fruit[]|select(. == "Apple")' fruit.json >/dev/null
見つかった要素を出力するには、>/dev/null
を省略します。
将来の訪問者のために、たまたま変数に配列があり、それに対してinputをチェックする必要があり、jq 1.5(INなし)がある場合、最良のオプションはindex
です。ただし、2番目の変数を使用します。
.inputField as $inputValue | $storedArray|index($inputValue)
これは機能的に.inputField | IN($storedArray[])
と同等です。
jq
以外の何かを使用することにオープンである場合、 Xidel を強くお勧めします。
これを使用すると、JSONiqとXPath/XQueryを組み合わせてJSONを処理できます。
単にブール値を返すようにするには:
$ xidel -s fruit.json -e '$json/contains((fruit)(),"Apple")'
true
配列fruit
に「Apple」が含まれている場合に要素を返すようにするには:
$ xidel -s fruit.json -e '$json/(fruit)()[contains(.,"Apple")]'
Apple
上記は「XPath表記」です。 「ドット表記」(jq
など):
$ xidel -s fruit.json -e '($json).fruit()[contains(.,"Apple")]'
Apple