반응형
jq를 사용하여 내부 배열의 값을 기준으로 개체 배열을 필터링하려면 어떻게 해야 합니까?
이 입력에 따라:
[
{
"Id": "cb94e7a42732b598ad18a8f27454a886c1aa8bbba6167646d8f064cd86191e2b",
"Names": [
"condescending_jones",
"loving_hoover"
]
},
{
"Id": "186db739b7509eb0114a09e14bcd16bf637019860d23c4fc20e98cbe068b55aa",
"Names": [
"foo_data"
]
},
{
"Id": "a4b7e6f5752d8dcb906a5901f7ab82e403b9dff4eaaeebea767a04bac4aada19",
"Names": [
"jovial_wozniak"
]
},
{
"Id": "76b71c496556912012c20dc3cbd37a54a1f05bffad3d5e92466900a003fbb623",
"Names": [
"bar_data"
]
}
]
jq를 사용하여 모든 개체를 반환하는 필터를 생성하려고 합니다.Id
내부에 "데이터"가 포함되지 않음Names
출력은 줄 바꿈으로 구분되어 있습니다.상기 데이터의 출력은 다음과 같습니다.
cb94e7a42732b598ad18a8f27454a886c1aa8bbba6167646d8f064cd86191e2b
a4b7e6f5752d8dcb906a5901f7ab82e403b9dff4eaaeebea767a04bac4aada19
저는 이 점에 어느 정도 가까운 것 같습니다.
(. - select(.Names[] contains("data"))) | .[] .Id
하지만select
필터가 올바르지 않고 컴파일되지 않습니다(get).error: syntax error, unexpected IDENT
).
아슬아슬하게!고객님의 고객명select
expression, 파이프를 사용해야 합니다.|
)이전에contains
.
이 필터는 예상 출력을 생성합니다.
. - map(select(.Names[] | contains ("data"))) | .[] .Id
jq Cookbook에는 구문의 예가 있습니다.
키 내용을 기준으로 개체 필터링
예를 들어 장르 키에 "house"가 포함된 개체만 원합니다.
$ json='[{"genre":"deep house"}, {"genre": "progressive house"}, {"genre": "dubstep"}]' $ echo "$json" | jq -c '.[] | select(.genre | contains("house"))' {"genre":"deep house"} {"genre":"progressive house"}
Colin D는 어레이의 JSON 구조를 유지하는 방법을 묻습니다.그러면 최종 출력은 JSON 오브젝트의 스트림이 아닌 단일 JSON 어레이가 됩니다.
가장 간단한 방법은 식 전체를 배열 컨스트럭터로 랩하는 것입니다.
$ echo "$json" | jq -c '[ .[] | select( .genre | contains("house")) ]'
[{"genre":"deep house"},{"genre":"progressive house"}]
지도 기능을 사용할 수도 있습니다.
$ echo "$json" | jq -c 'map(select(.genre | contains("house")))'
[{"genre":"deep house"},{"genre":"progressive house"}]
map은 입력 배열의 압축을 풀고 모든 요소에 필터를 적용하여 새 배열을 만듭니다.바꿔 말하면map(f)
와 동등하다[.[]|f]
.
다음은 any/2를 사용하는 다른 솔루션입니다.
map(select(any(.Names[]; contains("data"))|not)|.Id)[]
샘플 데이터와-r
옵션 생성:
cb94e7a42732b598ad18a8f27454a886c1aa8bbba6167646d8f064cd86191e2b
a4b7e6f5752d8dcb906a5901f7ab82e403b9dff4eaaeebea767a04bac4aada19
언급URL : https://stackoverflow.com/questions/26701538/how-to-filter-an-array-of-objects-based-on-values-in-an-inner-array-with-jq
반응형
'programing' 카테고리의 다른 글
SCRIPT5009: 'JSON'은 정의되어 있지 않습니다. (0) | 2023.03.27 |
---|---|
HTML 페이지를 AJAX를 통해 검색된 콘텐츠로 바꾸기 (0) | 2023.03.27 |
Mongoose에서 .populate()로 특정 필드를 반환합니다. (0) | 2023.03.27 |
MongoDB 문서 필드가 존재하지 않는 경우에만 업데이트하려면 어떻게 해야 합니까? (0) | 2023.03.27 |
각도 js 알 수 없는 공급자 (0) | 2023.03.27 |