[英]Replacing the value of JSON based on key value pair with jq
我有一個具有以下結構的 JSON
{
"name": "name",
"id": [
"abcdef"
],
"input_dataobjects": [
{
"id": "someid1",
"name": "somename1",
"provider": "someprovider",
"datatype": "somedatatype1"
},
{
"name": "some_name2",
"datatype": "some_datatype2",
"id": "some_id2"
}
]
}
我正在努力實現的目標
在input_dataobjects
如果datatype == somedatatype1
那么name = sonemewname1
。
我可以使用 input_dataobjects 的索引,因為我的 json 總是具有相同的結構。 但是有沒有什么不同的方法可以通過解析 input_dataobjects 並找到要替換的索引來實現它? 我正在使用jq
進行 JSON 操作。
我嘗試使用像.input_dataobjects[0].name="someting"
這樣的索引,因為我總是知道數據類型的位置。
陳述的最簡單,也許最有效的解決方案是:
.input_dataobjects |=
map( if .datatype == "somedatatype1"
then .name = "sonemewname1"
else . end )
這是基於jtc
unix實用程序的替代解決方案:
如果我理解你的問題吧,你想匹配datatype== somedatatype1
如果匹配,然后更新頂部name
與name
的兄弟姐妹datatype
?
如果是這樣,則基於jtc
解決方案如下所示:
bash $ <file.json jtc -w'[name]' -u'[datatype]:<somedatatype1>[-1][name]'
{
"id": [
"abcdef"
],
"input_dataobjects": [
{
"datatype": "somedatatype1",
"id": "someid1",
"name": "somename1",
"provider": "someprovider"
},
{
"datatype": "some_datatype2",
"id": "some_id2",
"name": "some_name2"
}
],
"name": "somename1"
}
bash $
如果您只是想更新/更改記錄的同級name
,請按以下方式運行:
bash $ <file.json jtc -w'[datatype]:<somedatatype1>[-1][name]' -u'"sonemewname1"'
{
"id": [
"abcdef"
],
"input_dataobjects": [
{
"datatype": "somedatatype1",
"id": "someid1",
"name": "sonemewname1",
"provider": "someprovider"
},
{
"datatype": "some_datatype2",
"id": "some_id2",
"name": "some_name2"
}
],
"name": "name"
}
bash $
這是jtc
綜合用戶指南
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.