Linux
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 中實現這一點
jq '.result = .end - .start'
這將讀取輸入 JSON 文件並將頂級
result
鍵設置為start
from的減法結果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)'
這應該顯示它與答案的這一部分中的較長命令有何相似之處。