Apple plist에서을 (를) 통한 여행과 관련된 복잡한 이유로 다음과 xml2json
같은 형식의 데이터가 포함 된 여러 JSON 파일이 있습니다.
{
"key": [ "key1", "key2", "key3" ],
"string": [ "value1", "value2", "value3" ]
}
그리고 그것을 일반 JSON 객체로 변환하고 싶습니다.
{
"key1": "value1",
"key2": "value2",
"key3": "value3"
}
약간의 헤드 뱅킹 후, 나는 jq
트릭을 수행하기 위해이 프로그램을 생각 해냈다.
jq '. as $d|[range(.key|length)|{"key":$d.key[.],"value":$d.string[.]}]|from_entries'
작동하지만 약간 복잡해 보입니다. 더 깨끗한 솔루션이 있는지 궁금합니다.
이것은 실제로이 질문 과 유사 하지만 차이점은 이것이 두 배열을 직접 포함하는 배열 대신 이름이 지정된 키 및 값 요소가있는 객체라는 것입니다.
제공하는 스크립트는 이미 꽤 좋습니다! 이 스크립트 변형은 색인을 입력 개체 대신 변수에 저장하므로 더 자연스럽게 읽을 수 있습니다. 그런 다음 하나의 주요 개체 배열을 만들고 함께 추가합니다.
jq '[range(.key | length) as $i | {(.key[$i]): .string[$i]}] | add'
이 문제를 처음 보았을 때 zip
내장 기능이 상황을 개선 할 것이라고 생각했습니다 . 그때 나는 기억했다 : 이미 zip
내장이있다! 그냥이라고 transpose
합니다. 이를 사용하여 다음과 같은 스크립트를 작성할 수 있습니다.
jq '[.key, .string] | transpose | map({key: .[0], value: .[1]}) | from_entries'
꽤 길지만 나에게도 따라 가기가 더 쉬워 보인다. 그러나 초점은 문자 수가 아니라 가독성에 있다고 가정합니다. 물론 두 솔루션을 혼합 할 수도 있습니다.
jq '[.key, .string] | transpose | map({(.[0]): .[1]}) | add'
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다