2017-03-21 3 views
0

추가 개체 모음이있는 json 개체가 있습니다.다른 모든 객체를 변경하지 않고 jq를 사용하여 객체 내의 객체를 수정하려면 어떻게해야합니까?

jq을 사용하면 다른 것들을 변경하지 않고 일부 개체를 수정할 수 있어야합니다.

변경 사항을 얻을 수있는 문제가 계속 발생하지만 다른 모든 개체는 사라집니다. 또는 나는 변화를 만들지 만 모든 다른 대상들에게 영향을 미친다. 여기

내가 old 배열의 두 번째 값을과를 만들

{ 
    "AAAA": { 
    "VALUES": { 
     "val_1": { 
     "key": "A_KEY1" 
     }, 
     "val_2": { 
     "key": "A_KEY2" 
     } 
    } 
    }, 
    "BBBB": { 
    "VALUES": { 
     "val_a": { 
     "key": "KEY1", 
     "old": [ 0, 1 ] 
     }, 
     "val_b": { 
     "key": "KEY2", 
     "old": [ 2, 3 ] 
     } 
    } 
    } 
} 

내가 얻을 찾고 있어요 것은 BBBB.VALUES에 그러나 각 값에 대해 AAAA 객체에 변화가없는 샘플 JSON입니다 새로운 키 값이 "new"라고 말합니다.

{ 
    "AAAA": { 
    "VALUES": { 
     "val_1": { 
     "key": "A_KEY1" 
     }, 
     "val_2": { 
     "key": "A_KEY2" 
     } 
    } 
    }, 
    "BBBB": { 
    "VALUES": { 
     "val_a": { 
     "key": "KEY1", 
     "old": [ 0, 1 ], 
     "new": 1 
     }, 
     "val_b": { 
     "key": "KEY2", 
     "old": [ 2, 3 ], 
     "new": 3 
     } 
    } 
    } 
} 

배열의 길이가 2임을 보장하므로 배열을 수정할 필요가 없습니다.

나는 jq의 많은 주문을 시도했지만 제대로 작동하지 않는 것 같습니다. 감사

당신은 BBBB.VALUES 아래의 키를 반복하는 [ keys[] ]을 사용할 수 있습니다

답변

0

: 읽기 쉬운 솔루션이 가능

jq '(.BBBB.VALUES | . [ keys[] ]) |= .+ { new: .old[1] }' data.json 
0

하나 with_entries/1을 이해하는 경우 :

.BBBB.VALUES 
|= with_entries(.value.new = .value.old[1])) 

또는 더 짧게 :

0

다음과 같습니다. map_values ​​

.BBBB.VALUES |= map_values(.new = .old[1])