![JSON을 구문 분석하고 해당 개체 값을 변조합니다.](https://linux55.com/image/145911/JSON%EC%9D%84%20%EA%B5%AC%EB%AC%B8%20%EB%B6%84%EC%84%9D%ED%95%98%EA%B3%A0%20%ED%95%B4%EB%8B%B9%20%EA%B0%9C%EC%B2%B4%20%EA%B0%92%EC%9D%84%20%EB%B3%80%EC%A1%B0%ED%95%A9%EB%8B%88%EB%8B%A4..png)
아래와 같이 xyz.json이라는 json 파일이 있습니다.
[
{
"annotations": [ "a" , "b" , "c" ],
"class": "image",
"filename": "vc00_02201.png"
},
{
"annotations": [],
"class": "image",
"filename": "vc00_02202.png"
}
{
"annotations": [],
"class": "image",
"filename": "vc00_02203.png"
},
{
"annotations": [],
"class": "image",
"filename": "vc00_02204.png"
}
]
쉘 스크립트를 사용하여 동일한 xyz.json 파일에 있는 "filename": "vc00_02201.png"의 "annotations" 개체를 "filename": "vc00_02204.png"의 "annotations"로 복사해야 합니다. 예상 출력:
[
{
"annotations": [ "a" , "b" , "c" ],
"class": "image",
"filename": "vc00_02201.png"
},
{
"annotations": [],
"class": "image",
"filename": "vc00_02202.png"
}
{
"annotations": [],
"class": "image",
"filename": "vc00_02203.png"
},
{
"annotations": [ "a" , "b" , "c" ],
"class": "image",
"filename": "vc00_02204.png"
}
]
답변1
$cat xyz.json | jq '.[3].annotations=.[0].annotations'
답변2
이는 또한 다음을 통해 달성될 수 있습니다.jtc
한 줄:
bash $ cat xyz.json | jtc -w'<vc00_02204.png>[-1][annotations]' -eu jtc -w'<vc00_02201.png>[-1][annotations]' xyz.json \;
[
{
"annotations": [
"a",
"b",
"c"
],
"class": "image",
"filename": "vc00_02201.png"
},
{
"annotations": [],
"class": "image",
"filename": "vc00_02202.png"
},
{
"annotations": [],
"class": "image",
"filename": "vc00_02203.png"
},
{
"annotations": [
"a",
"b",
"c"
],
"class": "image",
"filename": "vc00_02204.png"
}
]
bash $
물론 배열의 직접 멤버를 참조하여 수행할 수 있습니다. 예를 들면 다음과 같습니다.
bash $ cat xyz.json | jtc -w'[3][annotations]' -eu jtc -w'[0][annotations]' xyz.json \;
그러나 파일 이름으로 상호 참조하는 요점은 논쟁의 여지가 있습니다.