.png)
나는 이와 같은 긴 배열을 얻었다
{
"id": "byu6g6c4cjys5mdkg5znh8ju8c",
"create_at": 1511875272294,
"update_at": 1511875272294,
"delete_at": 0,
"display_name": "BMA",
"name": "BMA",
"description": "",
"email": "[email protected]",
"type": "O",
"company_name": "",
"allowed_domains": "",
"invite_id": "gdgz1tbxuinntx1fbr1ax7kehy",
"allow_open_invite": false,
"scheme_id": null
}
JQ를 통해 BMA라는 ID를 얻고 싶습니다. 현재 "jq -r '.[]["name"]"을 구문 분석하고 컬의 출력을 이름으로 필터링할 수 있으며 100개의 다른 이름과 함께 "BMA"를 얻을 수 있지만 이름이 있는 ID만 필터링하면 됩니다. = BMA . 어떤 아이디어가 있나요?
답변1
잭
다음을 통해 이 작업을 수행할 수 있어야 합니다.
jq '.[] | select( .name == "BMA" ).id'
이름이 이면 BMA
해당 .id
.
쉘 변수의 값을 사용하려면 다음 jq
으로 가져오십시오 --arg
.
myvariable=BMA
jq --arg name "$myvariable" '.[] | select( .name == $name ).id'
json -c 'this.name === "BMA"' -a id
답변2
jq 솔루션의 대안은 다음과 같습니다.jtc
:
bash $ jtc -w'[name]:<BMA>+0 [-1] [id]' input.json
"byu6g6c4cjys5mdkg5znh8ju8c"
bash $
답변3
사용밀러( ), 먼저 mlr
더 큰 배열에서 관련 항목( 와 같은 항목 name
) 을 추출한 BMA
다음 id
선택한 항목에서 필드를 추출합니다.
mlr --j2n filter '$name == "BMA"' then cut -f id file
이 --j2n
옵션은 mlr
JSON을 읽고 "인덱스/키트" 출력(기본적으로 데이터만)을 생성하도록 호출에 지시합니다.
byu6g6c4cjys5mdkg5znh8ju8c
질문 텍스트에 포함된 개체의 JSON 배열이 포함된 파일이 있으면 한 줄에 단일 문자열이 출력됩니다.