JSON:
"{
"a": "https://is2-ssl.com/",
"b": "https://a5.-ssl.com/",
"type": "response",
"c": [
{
"Number": 1,
"Reportname": "XXX",
"size": "2.5",
"Variants": [
"YYY"
]
}
],
"Meta": "ABC"
}
원하는 출력:
XXX,a,https://is2-ssl.com/
XXX,b,https://a5.-ssl.com/
값에 "http"(url)가 포함된 키 값 쌍을 인쇄하고 키와 값을 구분 기호 ","로 병합하고 ReportName을 추가하고 싶습니다.
답변1
"
JSON 문서의 첫 번째 문자의 철자가 틀려서 다음 .ReportName
을 얻고 싶다고 가정해 보겠습니다.첫 번째항목을 배열로 만들고 c
출력을 CSV로 만들고 싶습니다.
$ jq -r '.c[0].Reportname as $n | map_values(select(type == "string" and startswith("http"))) | to_entries[] | [$n, .key, .value] | @csv' file
"XXX","a","https://is2-ssl.com/"
"XXX","b","https://a5.-ssl.com/"
표현방식 jq
:
.c[0].Reportname as $n |
map_values(select(type == "string" and startswith("http"))) |
to_entries[] | [$n, .key, .value] | @csv
먼저 값을 골라 .Reportname
내부 jq
변수 에 할당합니다 $n
. 그런 다음 substring 으로 시작하는 문자열과 연결되지 않은 키를 삭제하여 원본 객체를 다시 작성합니다 http
.
예제 문서는 map_values()
다음과 같이 축소됩니다.
{
"a": "https://is2-ssl.com/",
"b": "https://a5.-ssl.com/"
}
그런 다음 이를 to_entries
동등한 것으로 변환합니다.
[
{ "key": "a", "value": "https://is2-ssl.com/" },
{ "key": "b", "value": "https://a5.-ssl.com/" }
]
...키에 직접 액세스하세요.
배열은 개체 집합으로 확장되고, []
저장된 값은 집합에 있는 각 개체의 일부와 함께 인용된 $n
CSV 출력으로 변환되는 배열을 만드는 데 사용됩니다..key
.value
@csv
jq
동일한 출력을 갖는 또 다른 표현식이지만 이전에 실행된 to_entries
다음 위와 같이 객체의 값 map()
대신 생성된 배열에 대해 작업을 수행합니다 .map_values()
.c[0].Reportname as $n |
to_entries |
map(
select(.value | type == "string" and startswith("http")) |
[$n, .key, .value] | @csv
)[]