jq 값을 포함하는 배열의 상위 객체 키

jq 값을 포함하는 배열의 상위 객체 키

다음과 같은 데이터가 있다고 가정해 보겠습니다.

{
  "18" : [ 2, 3, 3 ],
  "28" : [ 2, 2, 7 ],
  "45" : [ 3, 3, 5 ]
}

jq객체의 키/키와 주어진 값을 포함하는 배열을 반환하는 쿼리를 만들고 싶습니다 . 예를 들어 2는 키 "18"과 "28"에 존재하고 7은 "28"에만 존재합니다. 이것은 제가 찾고자 하는 상위 개체의 이름입니다. 설명서를 읽었지만 비슷한 예를 찾을 수 없는 것 같습니다.

답변1

map_values주어진 값 의 배열 만 사용 select하고 다음 배열의 키를 추출합니다.contain$val

jq -r --argjson val 2 'map_values(select(contains([$val]))) | keys[]' file

contains()반품진짜주어진 배열( [$val])이 함수의 입력에 완전히 포함되어 있는 경우. contains()돌아 오면진짜입력에 배열이 있는 경우 select()해당 배열이 반환됩니다.

map_values()입력 개체의 키와 관련된 배열을 선택하는 데 이를 사용하고 있습니다 . 이렇게 하면 전달된 선택 항목의 배열을 포함하는 제거된 객체가 제공되고 결과가 keys나에게 전달됩니다. 그런 다음 키 배열을 제공하고 이를 느슨한 문자열 집합으로 풀고 마지막으로 [].

주어진 입력 데이터에 대해 값이 2 인 경우 $val다음을 반환합니다.

18
28

데이터가 문자열이 아니라 숫자이기 때문에 값 2를 표현식에 전달하는 --argjson대신 사용하고 있습니다 .--arg$val

관련 정보