반응형
jq를 사용하여 json에서 여러 필드를 직렬로 구문 분석 및 표시
나는이 Json이
{
"users": [
{
"first": "Stevie",
"last": "Wonder"
},
{
"first": "Michael",
"last": "Jackson"
}
]
}
jq를 사용하여 성과 이름을 순차적으로 표시하고 싶습니다. 이렇게-
Stevie Wonder
Michael Jackson
이것은 내가 얼마나 멀리 왔는가-
jq '.users[].first, .users[].last'
그러나 그것은 표시
"Stevie"
"Michael"
"Wonder"
"Jackson"
다음을 주목하십시오-
- 내가 원하지 않는 큰 따옴표.
- 내가 원하지 않는 캐리지 리턴.
- 뒤죽박죽입니다. 내 쿼리는 모든 이름을 먼저 표시 한 다음 모든 성을 표시합니다. 그러나 나는 첫 번째, 첫 번째 마지막 쌍을 원합니다.
문자열 보간을 사용하는 것이 좋습니다.
jq '.users[] | "\(.first) \(.last)"'
더하기 를 사용 하여 문자열을 연결할 수 있습니다.
문자열 은 더 큰 문자열로 결합하여 추가됩니다.
jq '.users[] | .first + " " + .last'
키, 값이 문자열이면 위의 답변이 모두 잘 작동하지만 문자열과 정수를 추가 해야하는 상황이 있습니다 (위의 표현식을 사용하여 jq 오류)
요구 사항 : json 아래에 URL을 작성하려면
pradeep@seleniumframework>curl http://192.168.99.103:8500/v1/catalog/service/apache-443 | jq .[0]
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 251 100 251 0 0 155k 0 --:--:-- --:--:-- --:--:-- 245k
{
"Node": "myconsul",
"Address": "192.168.99.103",
"ServiceID": "4ce41e90ede4:compassionate_wozniak:443",
"ServiceName": "apache-443",
"ServiceTags": [],
"ServiceAddress": "",
"ServicePort": 1443,
"ServiceEnableTagOverride": false,
"CreateIndex": 45,
"ModifyIndex": 45
}
해결책:
curl http://192.168.99.103:8500/v1/catalog/service/apache-443 |
jq '.[0] | "http://" + .Address + ":" + "\(.ServicePort)"'
나는 이런 식으로 내가 원하는 것에 꽤 가까워졌습니다.
cat my.json | jq '.my.prefix[] | .primary_key + ":", (.sub.prefix[] | " - " + .sub_key)' | tr -d '"'
출력은 일반적으로 많은 문제없이 다른 도구로 가져올 수 있도록 yaml에 가깝습니다. (나는 여전히 입력 json의 부분 집합을 basicallt로 내보내는 방법을 찾고 있습니다)
이것은 이름의 배열을 생성합니다
> jq '[ .users[] | (.first + " " + .last) ]' ~/test.json
[
"Stevie Wonder",
"Michael Jackson"
]
jq '.users[]|.first,.last' | paste - -
반응형
'IT' 카테고리의 다른 글
가장 많이 사용되지 않는 데이터 시각화 (0) | 2020.05.21 |
---|---|
특정 부분 문자열 다음에 문자열 얻기 (0) | 2020.05.21 |
Subject와 BehaviorSubject의 차이점은 무엇입니까? (0) | 2020.05.21 |
목표 C의 메소드 구문 (0) | 2020.05.21 |
jQuery 게시 JSON (0) | 2020.05.21 |