Linux

jq減去2個鍵並將其添加到json

  • May 17, 2022

我有一個像這樣的 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鍵設置為startfrom的減法結果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)'

這應該顯示它與答案的這一部分中的較長命令有何相似之處。

引用自:https://unix.stackexchange.com/questions/702922