여러 JSON 파일을 병합하고 필드별로 중복 개체를 제거합니다.

여러 JSON 파일을 병합하고 필드별로 중복 개체를 제거합니다.

수십만 개의 JSON 파일을 단일 개체로 병합하려고 합니다. 이것의 도움으로답변모든 개체를 배열로 단일 개체에 성공적으로 추가했습니다. 이제 특정 필드나 매개변수가 중복되는 경우 병합 중에 일부 개체를 필터링하고 싶습니다. field 1동일한 값을 갖는 두 객체 와 같습니다 .

다음은 예입니다.

입력 파일 1:

[
    {
      "field 1": 10,
      "field 2": 25,
      "field 3": 35,
      "field 4": 45
    }
]

입력 파일 2:

[
    {
      "field 1": 15,
      "field 2": 25,
      "field 3": 35,
      "field 4": 45
    }
]

입력 파일 3:

[
    {
      "field 1": 10,
      "field 2": 20,
      "field 3": 30,
      "field 4": 40
    }
]

예상 출력:

[
    {
      "field 1": 10,
      "field 2": 25,
      "field 3": 35,
      "field 4": 45
    },
    {
      "field 1": 15,
      "field 2": 25,
      "field 3": 35,
      "field 4": 45
    }
]

field 1파일 3 개체는 동일한 값 으로 인해 병합되지 않습니다.

답변1

중복 항목을 제거하기 위해 개체 배열과 필드 이름을 입력으로 사용하는 unique_by()함수를 사용할 수 있습니다.jq

jq -n '[ inputs[] ] | unique_by(."value 1")'

내 다른 것에 첨부답변한 필드를 기반으로 고유한 선택을 하고 다른 필드를 기준으로 개체를 삭제하려면 다음을 수행할 수 있습니다. 다음 코드는 중복 항목을 제외하고 개체를 그룹화 "value 1"하고 다음을 포함하는 개체를 제외합니다."value 6"

jq -n '[ [inputs[]] | unique_by(."value 1")[] | select( has("value 6") | not )]  '

관련 정보