반응형
jq: 객체의 각 엔트리에 대한 인쇄 키와 값
어떻게 하면 jq가 json을 이렇게 받아들이게 할 수 있을까요?
{
"host1": { "ip": "10.1.2.3" },
"host2": { "ip": "10.1.2.2" },
"host3": { "ip": "10.1.18.1" }
}
다음 출력을 생성합니다.
host1, 10.1.2.3
host2, 10.1.2.2
host3, 10.1.18.1
포맷에는 관심이 없지만 키 이름과 값에 액세스하는 방법을 알 수 없습니다.
최상위 키를 스트림으로 가져오려면 내장 함수를 사용할 수 있습니다. keys[]
따라서 특정 문제에 대한 한 가지 해결책은 다음과 같습니다.
jq -r 'keys[] as $k | "\($k), \(.[$k] | .ip)"'
keys
키 이름을 정렬된 순서로 생성합니다.원래 순서로 작성하려면 , 를 사용합니다.keys_unsorted
.
키를 원래 순서로 생성하는 또 다른 방법은 다음과 같습니다.
jq -r 'to_entries[] | "\(.key), \(.value | .ip)"'
CSV 및 TSV 출력
여기서 @csv 및 @tsv 필터도 검토할 필요가 있습니다.
jq -r 'to_entries[] | [.key, .value.ip] | @tsv'
생산:
host1 10.1.2.3
host2 10.1.2.2
host3 10.1.18.1
임베디드 오브젝트
다음 예시와 같이 대상 키가 포함되어 있는 경우 jq 필터를 표시된 행에 따라 변경해야 합니다.
입력:
{
"myhosts": {
"host1": { "ip": "10.1.2.3" },
"host2": { "ip": "10.1.2.2" },
"host3": { "ip": "10.1.18.1" }
}
}
변경:
jq -r '.myhosts | keys[] as $k | "\($k), \(.[$k] | .ip)"'
매우 우아한 솔루션을 발견하다
jq 'with_entries(.value |= .ip)'
어떤 출력
{
"host1": "10.1.2.3",
"host2": "10.1.2.2",
"host3": "10.1.18.1"
}
다음은 jqplay 스니펫입니다.https://jqplay.org/s/Jb_fnBveMQ
함수with_entries
오브젝트 리스트의 각 오브젝트를 키/값 쌍으로 변환하기 위해.key
또는.value
각각 KV 항목마다 업데이트(덮어쓰기)하고 있습니다..value
현장에서의.ip
업데이트를 사용하여|=
교환입니다.
언급URL : https://stackoverflow.com/questions/34226370/jq-print-key-and-value-for-each-entry-in-an-object
반응형
'source' 카테고리의 다른 글
Json을 사용하여 두 가지 데이터 유형이 될 수 있는 JSON 속성을 역직렬화하는 방법.그물 (0) | 2023.03.10 |
---|---|
배열별로 정렬된 ID 배열을 가진 WP_쿼리 (0) | 2023.03.10 |
네스트된ng클릭콜간의이벤트 전파를 취소하는 가장 좋은 방법은 무엇입니까? (0) | 2023.03.10 |
AngularJs 복잡한 데이터를 지침으로 전달 (0) | 2023.03.05 |
차단된 발신지 간 요청:같은 오리진 정책에 따라 다음 위치에서 원격 리소스를 읽을 수 없습니다. (0) | 2023.03.05 |