JSON을 구문 분석하고 해당 개체 값을 변조합니다.

JSON을 구문 분석하고 해당 개체 값을 변조합니다.

아래와 같이 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 \;

그러나 파일 이름으로 상호 참조하는 요점은 논쟁의 여지가 있습니다.

관련 정보