我有一个像这样的 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
的减法结果。start
end
示例运行:
$ 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)'
这应该显示它与答案这部分中较长的命令有何相似之处。