jq를 사용할 때 와일드카드 문자를 올바르게 이스케이프합니다.

jq를 사용할 때 와일드카드 문자를 올바르게 이스케이프합니다.

다음 명령이 유효합니다:

$ echo '{ "a": [ { "b": "1" }, { "b": "2" } ] }' | jq -r '.a[0].b'
1

b그러나 아래의 모든 요소의 값을 얻으려고 하면 a다음과 같은 오류가 발생합니다.

$ echo '{ "a": [ { "b": "1" }, { "b": "2" } ] }' | jq -r '.a[*].b'
jq: error: syntax error, unexpected '*' (Unix shell quoting issues?) at <top-level>, line 1:
.a[*].b   
jq: 1 compile error

와일드카드를 어떻게 피해야 합니까? 나는 여러 가지 변형을 시도했지만 성공하지 못했습니다.

와일드카드를 배열 인덱스로 사용하는 것은 다음과 같은 유효한 옵션입니다.https://support.smartbear.com/alertsite/docs/monitors/api/endpoint/jsonpath.html#:~:text=JSONPath%20is%20a%20query%20언어,%20requires%20 to%20be%20 확인.

답변1

배열 반복자에는 별표 문자가 필요 jq하지 .[]않습니다. 다음 명령은 예상되는 출력을 제공합니다.

echo '{ "a": [ { "b": "1" }, { "b": "2" } ] }' | jq -r '.a[].b'

결과:

1
2

추가 참조:jq 매뉴얼

구문이 다른 이유에 대해서는 jq쿼리를 위한 자체 구문이 있는 도구가 있습니다. JSONPath 표준을 기반으로 하지 않습니다.

관련 정보