반응형
jq 필터에 인수 전달
config.json은 다음과 같습니다.
{
"env": "dev",
"dev": {
"projects" : {
"prj1": {
"dependencies": {},
"description": ""
}
}
}
}
bash 명령어는 다음과 같습니다.
PRJNAME='prj1'
echo $PRJNAME
jq --arg v "$PRJNAME" '.dev.projects."$v"' config.json
jq '.dev.projects.prj1' config.json
출력:
prj1
null
{
"dependencies": {},
"description": ""
}
따라서 $PRJNAME은 prj1이지만 첫 번째 호출은 출력만 합니다.null.
누가 나 좀 도와줄래?
jq 프로그램.dev.projects."$v"이 예에서는, 문자 그대로, 라고 하는 이름의 키를 찾으려고 합니다."$v"대신 다음을 시도해 보십시오.
jq --arg v "$PRJNAME" '.dev.projects[$v]' config.json
사용할 수 있습니다.--argjson네 아들을 만들 때도 마찬가지야
--arg a v # set variable $a to value <v>;
--argjson a v # set variable $a to JSON value <v>;
위의 댓글에서 물어본 바와 같이 여러 개의 아르구메트를 패스하는 방법이 있습니다.좀 더 우아한 방법이 있을지도 모르지만, 효과가 있어요.
- 반드시 모든 키가 필요한 경우 다음을 사용할 수 있습니다.
jq --arg key1 $k1 --arg key2 $k2 --arg key3 $k3 --arg key4 $k4 '.[$key1] | .[$key2] | .[$key3] | .[$key4] '
- 키를 항상 사용하지 않는 경우 다음과 같이 할 수 있습니다.
jq --arg key $k ' if key != "" then .[$key] else . end'
- 키가 어레이를 참조하는 경우가 있는 경우:
jq --arg key $k ' if type == "array" then .[$key |tonumber] else .[$key] end'
물론 당신은 이것들을 결합할 수 있습니다!
다음과 같이 할 수 있습니다.
key="dev.projects.prj1"
filter=".$key"
cat config.json | jq $filter
json 파일의 어레이를 대체하기 위한 bash 명령어 예를 나타냅니다.모든 것이 변수입니다.
a=/opt/terminal/conf/config.json ; \
b='["alchohol"]' ; \
c=terminal.canceledInspections.resultSendReasons ; \
cat $a | jq .$c ; \
cat $a | jq --argjson b $b --arg c $c 'getpath($c / ".") = $b' | sponge $a ; \
cat $a | jq .$c
언급URL : https://stackoverflow.com/questions/34745451/passing-arguments-to-jq-filter
반응형
'programing' 카테고리의 다른 글
| 상태에서의 어레이에 값을 추가하는 가장 좋은 방법은 무엇입니까? (0) | 2023.03.23 |
|---|---|
| XSLT는 JSON에 상당합니다. (0) | 2023.03.23 |
| new NativeEventEmitter()는 필수 addListener 메서드 없이 null 이외의 인수를 사용하여 호출되었습니다. (0) | 2023.03.23 |
| Woocommerce - 고객이 특정 역할인 경우 다른 PayPal 이메일 주소를 설정합니다. (0) | 2023.03.23 |
| Java용 JWT(JSON Web Token) 라이브러리 (0) | 2023.03.23 |