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
      }
    }
  }
}

我想减去 end 和 start 并将其添加到 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 文档并将顶级键设置为fromresult的减法结果。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)'

这应该显示它与答案这部分中较长的命令有何相似之处。

相关内容