programing

jq가 있는 배열에 요소가 있는지 확인하는 방법

instargram 2023. 3. 23. 22:16
반응형

jq가 있는 배열에 요소가 있는지 확인하는 방법

어레이가 있는데 해당 어레이에 요소가 있는지 확인하거나 jq, fruit.json을 사용하여 해당 요소를 어레이에서 가져올 필요가 있습니다.

{
    "fruit": [
        "apple", 
        "orange",
        "pomegranate",
        "apricot",
        "mango"
    ]
}


cat fruit.json | jq '.fruit .apple' 

동작하지 않는다

contains의 의미는 전혀 간단하지 않다.일반적으로 어레이에 특정 값이 있는지 테스트하려면 '인덱스'를 사용하는 것이 좋습니다.

.fruit | index( "orange" )

그러나 대상 항목 자체가 배열인 경우 일반 형식은 다음과 같습니다.

 ARRAY | index( [ITEM] )

사용해야 합니다. 예:

[1, [2], 3] | index( [[2]] )  #=> 1

입력/1

당신의 jq가IN/1더 나은 해결책은 그것을 사용하는 것입니다.

.fruit as $f | "orange" | IN($f[])

당신의 jq가first/1(jq 1.5와 마찬가지로) 다음으로 고속의 정의를 나타냅니다.IN/1사용 방법:

def IN(s): first((s == .) // empty) // false;

any(_;_)

때때로 더 편리한 또 다른 효율적인 대안은 다음을 사용하는 것입니다.any/2,예.

any(.fruit[]; . == "orange")

또는 동등하게:

any(.fruit[] == "orange"; .)

가지기 위해jq어레이의 경우 성공이 반환됩니다.fruit포함하다"apple", 그 이외의 에러는 다음과 같습니다.

jq -e '.fruit|any(. == "apple")' fruit.json >/dev/null

발견된 요소를 출력하려면 로 변경합니다.

jq -e '.fruit[]|select(. == "apple")' fruit.json

고정 스트링을 검색할 경우 이는 그다지 관련이 없지만 이 문자열은select표현식이 다른 값과 일치할 수 있습니다(예: regexp인 경우).

고유한 값만 출력하려면 결과를 다음에 전달합니다.unique.

jq '[.fruit[]|select(match("^app"))]|unique' fruit.json

다음부터 모든 과일을 검색합니다.app및 고유값을 출력합니다.(원래의 표현은 다음과 같이 감싸야 한다는 점에 주의해 주세요.[]전해지기 위해unique.)

[경고: 댓글 및 대체 답변을 참조하십시오]

cat fruit.json | jq '.fruit | contains(["orange"])'

향후 방문자에게 있어서 어레이가 변수에 있고 입력과 대조하여 확인하고 싶을 때 jq 1.5(IN 없음)가 있는 경우 최적의 옵션은 다음과 같습니다.index그러나 두 번째 변수:

.inputField as $inputValue | $storedArray|index($inputValue)

이것은 기능적으로 와 동등합니다..inputField | IN($storedArray[]).

여기에 답을 더하면, 만약 당신이 과일 배열을 다른 과일 배열과 비교해서 걸러야 한다면, 당신은 다음과 같은 것을 할 수 있다:

cat food.json | jq '[.fruit[] as $fruits | (["banana", "apple"] | contains([$fruits])) as $results | $fruits | select($results)]'

그러면 위의 샘플 json에 "Apple"만 포함된 배열이 반환됩니다.

이 수정된 샘플은 여기서 작동했습니다.

jq -r '.fruit | index( "orange" )' fruit.json | tail -n 1

출력의 마지막 줄만 가져옵니다.

존재하는 경우 반환됩니다.0그렇지 않으면 반환됩니다.null.

언급URL : https://stackoverflow.com/questions/43259563/how-to-check-if-element-exists-in-array-with-jq

반응형