아래에 정의된 것과 동일한 구조를 가진 두 개의 JSON 파일( file1.json
및 ) 이 있고 아래와 같이 두 개의 배열 목록이 있습니다.file2.json
첫 번째 파일은 ( file1.json
)입니다.
{
"Lists1": [
{
"point": "a",
"coordinates": [
2289.48096,
2093.48096
]
}
],
"Lists2": [
{
"point": "b",
"coordinates": [
2289.48096,
2093.48096
]
}
]
}
두 번째 파일은 ( file2.json
)입니다.
{
"Lists1": [
{
"point": "c",
"coordinates": [
2289.48096,
2093.48096
]
}
],
"Lists2": [
{
"point": "d",
"coordinates": [
2289.48096,
2093.48096
]
}
]
}
따라서 내 예상 결과는 다음과 같습니다.
{
"Lists1": [
{
"point": "a",
"coordinates": [
2289.48096,
2093.48096
]
},
{
"point": "c",
"coordinates": [
2289.48096,
2093.48096
]
}
]
"Lists2": [
{
"point": "b",
"coordinates": [
2289.48096,
2093.48096
]
},
{
"point": "d",
"coordinates": [
2289.48096,
2093.48096
]
}
]
}
이 두 파일을 병합(병합)하는 방법을 사용하려고 합니다 jq
. 아래 명령을 사용하여 찾았지만 이것은 목록에서만 작동합니다.
jq -n '{ list1: [ inputs.list1 ] | add }' file1.json file2.json
list1
sum 을 결합하기 위해 이 함수를 수정하는 방법이 있습니까 list2
?
답변1
최상위 키가 모든 문서에서 항상 동일하다고 가정하고 키를 별도의 변수로 추출한 다음 해당 키의 데이터를 줄입니다(누적).
jq -s '
(.[0] | keys[]) as $k |
reduce .[] as $item (null; .[$k] += $item[$k])' file*.json
를 사용하면 -s
모든 입력을 단일 배열로 읽습니다.
Lists1
이는 키 와 각 문서를 어느 정도 반복하여 Lists2
데이터를 null
처음부터 새로운 구조로 축적합니다.
입력 JSON 문서의 형식이 올바르다고 가정합니다.
{
"Lists1": [{"point":"a","coordinates":[2289.48096,2093.48096]}],
"Lists2": [{"point":"b","coordinates":[2289.48096,2093.48096]}]
}
{
"Lists1": [{"point":"c","coordinates":[2289.48096,2093.48096]}],
"Lists2": [{"point":"d","coordinates":[2289.48096,2093.48096]}]
}
두 개의 개체가 포함된 다음과 같은 결과 문서를 얻게 됩니다.
{
"Lists1": [{"point":"a","coordinates":[2289.48096,2093.48096]},{"point":"c","coordinates":[2289.48096,2093.48096]}]
}
{
"Lists2": [{"point":"b","coordinates":[2289.48096,2093.48096]},{"point":"d","coordinates":[2289.48096,2093.48096]}]
}
두 키를 모두 동일한 객체에 두시겠습니까?
jq -s '
[ (.[0] | keys[]) as $k |
reduce .[] as $item (null; .[$k] += $item[$k]) ] | add' file*.json
답변2
열쇠라면아니요문서 전체에서 항상 동일하며 다음과 같은 작업이 수행됩니다.
jq --slurp '
reduce (.[] | to_entries | .[]) as {$key, $value} (
{};
.[$k] += $v
)
' file*.json
다음 두 파일이 주어지면:
{
"Lists1": [{"point":"a","coordinates":"..."],
"Lists2": [{"point":"b","coordinates":"..."}]
}
{
"Lists1": [{"point":"c","coordinates":"..."}],
"Lists2": [{"point":"d","coordinates":"..."}],
"Lists3": [{"point":"e","coordinates":"..."}]
}
출력은 다음과 같습니다
{
"Lists1":[{"point":"a","coordinates":"..."},{"point":"c","coordinates":"..."}],
"Lists2":[{"point":"b","coordinates":"..."},{"point":"d","coordinates":"..."}],
"Lists3":[{"point":"e","coordinates":"..."}]
}