[英]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.