jq는 2개의 키를 빼고 json에 추가합니다.

jq는 2개의 키를 빼고 json에 추가합니다.

나는 이런 JSON을 가지고 있습니다

{
  "status": "InProgress",
  "transactionId": "1652807586",
  "startTime": "2022-05-17T17:13:06Z",
  "viewIdContexts": {
    "dtve2.2": {
      "subgraphStatusCounts": {
        "end": 10,
        "start": 4,
        "startReturned": 127
      }
    }
  }
}

끝과 시작을 빼고 json에 추가하여 예상 결과는 다음과 같습니다.

{
  "status": "InProgress",
  "transactionId": "1652807586",
  "startTime": "2022-05-17T17:13:06Z",
  "viewIdContexts": {
    "dtve2.2": {
      "subgraphStatusCounts": {
        "end": 10,
        "start": 4,
        "result": 6,
        "startReturned": 127
      }
    }
  }
}

jq에서 이것을 달성하는 방법

답변1

jq '.result = .end - .start'

이는 입력 JSON 문서를 읽고 최상위 키를 result빼기 결과로 설정합니다.startend

실행 예시:

$ echo '{ "end": 10, "start": 4 }' | jq '.result = .end - .start'
{
  "end": 10,
  "start": 4,
  "result": 6
}

jq-c"컴팩트" 출력을 위한 옵션과 함께 사용합니다 .


업데이트 질문에서 JSON 문서를 사용하여 관련 부분을 선택하고 |=결과( )로 업데이트합니다.

jq '.viewIdContexts."dtve2.2".subgraphStatusCounts |= (.result = .end - .start)'

키 중 하나에는 점이 포함되어 있으므로 따옴표로 묶어야 합니다.

이 답변의 첫 번째 명령은 다음 명령을 단순화한 것입니다.

jq '. |= (.result = .end - .start)'

이는 답변의 이 부분에서 더 긴 명령과 얼마나 유사한지를 보여줍니다.

관련 정보