我有一个具有以下结构的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"
这样的索引,因为我总是知道数据类型的位置。
答案 0 :(得分:2)
针对所述问题的最简单,也许是最有效的解决方案是:
.input_dataobjects |=
map( if .datatype == "somedatatype1"
then .name = "sonemewname1"
else . end )
答案 1 :(得分:0)
这是基于 jtc
Unix实用程序的替代解决方案:
如果我理解您的问题是对的,那么您想匹配datatype== somedatatype1
,如果匹配,然后用name
的{{1}}兄弟姐妹更新顶部的name
?< / p>
如果是这样,则基于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 $
全面的user guide