JQ(NAME을 기반으로 ID 가져오기)

JQ(NAME을 기반으로 ID 가져오기)

나는 이와 같은 긴 배열을 얻었다

{
    "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

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옵션은 mlrJSON을 읽고 "인덱스/키트" 출력(기본적으로 데이터만)을 생성하도록 호출에 지시합니다.

byu6g6c4cjys5mdkg5znh8ju8c질문 텍스트에 포함된 개체의 JSON 배열이 포함된 파일이 있으면 한 줄에 단일 문자열이 출력됩니다.

관련 정보