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)'

キーの1つにドットが含まれているため、引用符で囲む必要があります。

この答えの最初のコマンドは、次のコマンドを単純化したものです。

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

これは、答えのこの部分で、より長いコマンドにどれだけ似ているかを示しています。

おすすめ記事