2016-11-29 2 views
1

jq (https://stedolan.github.io/jq/)로 놀았지만 원하는 방식대로 작동하지 않는 것처럼 보입니다. 두 개의 JSON 파일을 병합하려고 시도하고 ID 값을 재설정하면 새로운 증분 값으로 바뀝니다.

나는, 나는 그것이 ID 값을 복제있을 것이다 병합 할 때부터 ' ID'값을 증가에 대한 이동하는 방법을 알아낼 수 없습니다 이제이 명령 jq -s '[.[][]]' file*.json > combined_file.json을 사용하여 두 JSON 파일을 병합 할 수 있었다.

file_a.json

[ { 
    "id": 0, 
    "fruit_name": "Apple", 
    "fruit_category": "category 1", 
    "fruit_count": 1 
    }, 
    { 
    "id": 1, 
    "fruit_name": "Apricot", 
    "fruit_category": "category 2", 
    "fruit_count": 1 
    }, 
    { 
    "id": 2, 
    "fruit_name": "Avocado", 
    "fruit_category": "category 3", 
    "fruit_count": 2 
    } 
] 

file_b.json

[ { 
    "id": 0, 
    "fruit_name": "Banana", 
    "fruit_category": "category 4", 
    "fruit_count": 1 
    }, 
    { 
    "id": 1, 
    "fruit_name": "Bilberry", 
    "fruit_category": "category 5", 
    "fruit_count": 1 
    }, 
    { 
    "id": 2, 
    "fruit_name": "Blackberry", 
    "fruit_category": "category 6", 
    "fruit_count": 2 
    } 
] 

나는이 대답을 탐험했습니다 (How do I create an incremental index with jq) :

내 JSON 파일은 다음과 같이 보입니다 하지만 어떻게 작동시키는 지 알 수는 없었습니다.

답변

3

그래서 당신의 목표는 ID를 다시 시드하는 경우, 당신이 할 수 있습니다 : 나는 inputs를 사용하는 대신 여러 개의 입력 작업을 쉽게 소리내어 찾을

$ jq -n '[ foreach inputs[] as $i (0; .+1; $i*{id:(.-1)}) ]' file_?.json 

.

아이디어는 각 항목을 입력에서 가져 와서 (개체와 원하는 ID로 병합하여) ID를 업데이트하는 것입니다.

+0

매력처럼 작동했습니다!. 고맙습니다! – Pennf0lio

0

먼저 소리내어 먹는다, 다음 (add)를 연결하여, 마지막으로 "ID"값을 조정 :

$ jq -s 'add | reduce range(0;length) as $n (.; .[$n].id = $n)' file_?.json 

이 방법은 JQ 이상 (및 이전 버전)의 버전 1.3을 사용하여 작동합니다.

+0

이 솔루션은 시도해도 효과가있었습니다. 고마워, 피크! – Pennf0lio