이 JSON 파일이 있습니다.
{ "키11": 1010, "키12": 12120, "키13": 12103 }
jq
a의 해당 값이 key[0-9][0-9]
0 인지 확인하는 방법 , jq
그렇다면 성공적으로 종료하고, 그렇지 않으면 종료합니까?
이전 질문에서 이 스크립트를 얻었습니다.
#!/bin/bash
json=$(cat <<EOF
{"key11":12120,"key11_":13,"key11_yes":12107,
"key12":13492,"key12_no":9,"key12_yes":13483,
"key13":10200,"key13_no":9,"key13_yes":10191,
"key21":16756,"key21_no":30,"key21_yes":16726,
"key22":17057,"key22_no":34,"key22_yes":17023,
"key23":16798,"key23_no":25,"key23_yes":16773,
"key31":2733,"key31_yes":2733,
"key32":2561,"key32_yes":2561,
"key33":2570,"key33_yes":2570}
EOF
)
json2=$(echo ${json}|jq 'with_entries(if (.key|test("key[0-9][0-9]$")) then ( {key: .key, value: .value } ) else empty end )')
결과 :
{ "key11": 12120, "key12": 13492, "key13": 10200, "key21": 16756, "key22": 17057, "key23": 16798, "key31": 2733, "key32": 2561, "key33": 2570 }
이제 모든 키에 첨부된 값을 확인하고 싶습니다 $json2
.어느항목의 반환 값이 0입니다 0
.
답변1
any
항목 중 하나라도 true인 경우 true를 반환하는 내장 필터입니다., 그렇지 않으면 거짓입니다.--exit-status
/ 종료 -e
원인jq
0
iff의 최종 출력은 false도 null도 아닙니다.
스크립트에 표시된 대로 관심 있는 키만 포함하도록 문서를 필터링한 경우 다음을 수행할 수 있습니다.
previous_command | jq -e 'any( .[] ; . == 0 )'
.[]
모든 값을 가져와 any
그 중 0이 발견된 경우에만 true를 출력합니다. 또는 가장 명확하다고 생각되는 것을 선택하십시오 [.[]|.==0]|any
.map(.==0) | any
한 번에 모든 작업을 수행하여 낭비적인 프로세스를 줄일 수도 있습니다 jq
.
jq -e '[to_entries | .[] | select(.key | test("key[0-9][0-9]$")) | .value == 0 ] | any' data.json
이는 일치하는 모든 키를 선택하고 각 값이 0인지 확인한 다음 결과 컬렉션을 파이프하고 any
0이 있으면 0으로 종료합니다. NaN이 없다고 확신하는 경우 NaN을 모두 곱할 수도 있습니다.reduce
.