簡體   English   中英

jq-添加新字段並更新整個文件

[英]jq - add new field with updating whole file

我有以類似方式構造的json文件:

[
{
"_id":"1234",
"org":"org1",
"int":
    {"url":"http://url.com.uk:1234"}},
{
"_id":"4321",
"org":"org2",
"int":
    {"url":"http://url.com.us:4321"}},
...
]

現在,我從一個條目“跳轉”到另一個條目,並檢查URL應用程序是否正常工作。 檢查后,我想添加/更新字段“狀態”。 但我無法更新整個文件,即時通訊只是:

$ jq --arg mod "GOOD" '.[0].int + {stat: $mod}' tmp.json
{
  "url": "http://url.com.uk:1234",
  "stat": "GOOD"
}

我如何用jq命令獲取新的更新的整個文件,而不僅僅是其中一部分?

如果將數據放入data.json ,並將要對每個記錄進行的更改放入單獨的arg.json參數文件中,例如

{
    "1234": { "int": { "stat": "GOOD" } },
    "4321": { "int": { "stat": "BAD", "xxx": "yyy" } }
}

並運行jq為

$ jq -M --argfile arg arg.json 'map(. + $arg[._id])' data.json

然后它將輸出更新的數據,例如

[
  {
    "_id": "1234",
    "org": "org1",
    "int": {
      "stat": "GOOD"
    }
  },
  {
    "_id": "4321",
    "org": "org2",
    "int": {
      "stat": "BAD",
      "xxx": "yyy"
    }
  }
]

請注意, +替換鍵。 如果要合並鍵,可以使用*例如

$ jq -M --argfile arg arg.json 'map(. * $arg[._id])' data.json 

產生

[
  {
    "_id": "1234",
    "org": "org1",
    "int": {
      "url": "http://url.com.uk:1234",
      "stat": "GOOD"
    }
  },
  {
    "_id": "4321",
    "org": "org2",
    "int": {
      "url": "http://url.com.us:4321",
      "stat": "BAD",
      "xxx": "yyy"
    }
  }
]

如果您想就地更新數據,則可以使用答案中所述的海綿 ,例如使用jq操作JSON。

$ jq -M --argfile arg arg.json 'map(. * $arg[._id])' data.json | sponge data.json

您可以通過操作映射到數組並為int ,例如:

jq --arg mod "GOOD" '.[] | .int=.int + {stat: $mod}' tmp.json

{
  "_id": "1234",
  "org": "org1",
  "int": {
    "url": "http://url.com.uk:1234",
    "stat": "GOOD"
  }
}
{
  "_id": "4321",
  "org": "org2",
  "int": {
    "url": "http://url.com.us:4321",
    "stat": "GOOD"
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM