我正在尝试采用现有的JSON元素,并创建一个具有附加值的键的新元素。
我知道我可以使用许多其他工具来执行此操作,但我想知道仅凭jq是否可以实现
输入json文件:
{
"entries": [
{
"uuid": "1a03",
"enabled": true,
"autoname": true,
"name": "LBC",
"number": 0,
"epgauto": true,
"epggrab": [],
"dvr_pre_time": 0,
"dvr_pst_time": 0,
"epg_running": -1,
"services": [
"ea8"
],
"tags": [
"0a7"
],
"bouquet": ""
},
{
"uuid": "4a05",
"enabled": true,
"autoname": true,
"name": "Radio X",
"number": 0,
"epgauto": true,
"epggrab": [],
"dvr_pre_time": 0,
"dvr_pst_time": 0,
"epg_running": -1,
"services": [
"9d36"
],
"tags": [
"08fa7"
],
"bouquet": ""
},...]
}
然后我为所需的对象过滤此对象,然后返回单个对象。
我尝试使用地图“ +”运算符添加值,但我认为我的语法可能是错误的
,但未成功我正在使用它来过滤想要的对象
.entries[] | select(.uuid=="4a05")
如果我最终在uuid=4a05
上进行过滤,我想创建以下输出
[{"tags":["08fa7","MYNEWVALUE"],"number":mynew##,"uuid":"4a05"}]
答案 0 :(得分:1)
这是完成任务的一种方法-首先创建一个具有感兴趣字段的对象,然后更新.tags
:
.entries[]
| select(.uuid=="4a05")
| {tags, uuid, number: "mynew##"}
| .tags += ["MYNEWVALUE"]