2017-09-12 6 views
1

여러 JSON 배열이 있습니다. 특정 값을 포함하는 JSON의 수를 얻고 싶습니다.jq 특정 값을 포함하는 배열에서 jsons 수를 얻습니다.

예 :

[ 
{ 
    "key": "value1", 
    "2ndKey":"2ndValue1" 
}, 
{ 
    "key": "value2", 
    "2ndKey":"2ndValue2" 
}, 
{ 
    "key": "value1", 
    "2ndKey":"2ndValue3" 
} 
] 

그래서 경우에 나는 키 값 1을 찾고, 결과는 2

내가 JQ를 사용하여 솔루션을 좀하고 싶습니다해야한다. 나는 이미 몇 가지 시도를했지만, 완전히 작동하지는 않았습니다. 가장 좋은 것은 다음과 같습니다.

cat /tmp/tmp.txt | jq ' select(.[].key == "value1") | length ' 

올바른 결과가 나오지만 여러 번 표시됩니다.

아무도 내 코드를 개선하는 데 도움을 줄 수 있습니까? 미리 감사드립니다!

답변

1

당신은 아주 가깝습니다. 아래에 정의 된 계산이

map(select(.key == "value1")) | length 

또는 동등한

[ .[] | select(.key == "value1") ] | length 
+0

! 고마워요! – Philipp

1

효율적이고 편리한 방법을 시도하는 것은 '수'를 사용하는 것입니다 : 내가 찾던 무엇

def count(s; cond): reduce s as $x (0; if ($x|cond) then .+1 else . end); 
count(.[]; .key == "value1")