2017-04-14 4 views
1

다음 두 개의 json 파일이 있습니다.하위 개체의 모든 배열을 병합

file1.json

{"field1":{"item1":0,"array1":[0,0,0],"array2":[0,0],"array3":[0]},"field2":{"dummy":0}} 

file2.json

{"field1":{"item1":1,"array1":[1,1,1],"array2":[1,1],"array3":[1]},"field2":{"dummy":0}} 

나는이 가져올 : 나는 배열에 의해 수동으로 배열 그것을 할 수 있어요

{"field1":{"item1":0,"array1":[0,0,0,1,1,1],"array2":[0,0,1,1],"array3":[0,1]},"field2":{"dummy":0}} 

을하지만 난 것 field1의 각 배열에 대해 자동으로이를 수행하는 방법을 선호합니다. 누군가 나에게 팁이 있습니까?

도움을 주셔서 감사합니다.

답변

1

다음은 file1.json 및 file2.json에 유효한 JSON이 있다고 가정합니다. 당신은 실행하여 JQ를 사용하여 JSON에 준 JSON 변환 할 수 있습니다 : jq -n -f fileN.json

def extend_arrays(o): 
    reduce keys[] as $k 
    (.; if (.[$k]|type) == "array" and (o[$k]|type == "array") 
     then .[$k] += o[$k] else . end); 

.field1 |= extend_arrays($second|.field1) 

을 파일 program.jq 이러한 라인으로, 호출 :

:

jq -c --argfile second file2.json -f program.jq file1.json 

필요한 출력을 생성

{"field1":{"item1":0,"array1":[0,0,0,1,1,1],"array2":[0,0,1,1],"array3":[0,1]},"field2":{"dummy":0}} 
+0

감사합니다. 그러나 향후 독자를 위해 program.jq는 한 줄에 있어야합니다. 따라서 program.jq의 각 줄 바꿈을 제거해야합니다. – vadetech1311

+0

그렇지 않습니다. 일반적으로 새 줄을 포함 할 수있는 program.jq 파일에이 프로그램을 넣습니다. – peak

+0

포럼에서 다른 사람들이 나로 여러 줄짜리 프로그램을 가지고있는 것을 보았습니다. 어쩌면 내가 사용하는 버전 (jq 1.4)에서 온 것일 수 있습니다. 모든 경우에, 그것은 단지 새로운 줄을 제거함으로써 나를 위해 일합니다. 그래서 다시 한번 감사드립니다! – vadetech1311