jq如何过滤数组和添加元素
jq How to filter array and add element
我正在尝试使用 jq 将数据添加到下面 json 中的特定元素:
{
"users": [
{
"username": "karim",
"queue": [
"default"
]
},
{
"username": "admin",
"queue": [
"apps",
"prod"
]
}
]
}
我想做的是像这样在用户管理员的队列[]中添加项目
{
"users": [
{
"username": "hive",
"queue": [
"default"
]
},
{
"username": "admin",
"queue": [
"apps",
"prod",
"dev"
]
}
]
}
这是我使用的命令
jq '.users[] | select(.username == "admin").queue += ["dev"]' file.json
但结果并不如预期
{
"username": "hive",
"queue": [
"default"
]
}
{
"username": "admin",
"queue": [
"apps",
"prod",
"dev"
]
}
为什么用户数组没有出现?我需要将它保留在结果中
通过管道,您可以将上下文向下更改为数组元素,这就是您希望选择的内容。如果你在管道和选择两边加上括号,你将保留分配,因此过滤器的输出在 top-level:
jq '(.users[] | select(.username == "admin")).queue += ["dev"]'
{
"users": [
{
"username": "karim",
"queue": [
"default"
]
},
{
"username": "admin",
"queue": [
"apps",
"prod",
"dev"
]
}
]
}
我正在尝试使用 jq 将数据添加到下面 json 中的特定元素:
{
"users": [
{
"username": "karim",
"queue": [
"default"
]
},
{
"username": "admin",
"queue": [
"apps",
"prod"
]
}
]
}
我想做的是像这样在用户管理员的队列[]中添加项目
{
"users": [
{
"username": "hive",
"queue": [
"default"
]
},
{
"username": "admin",
"queue": [
"apps",
"prod",
"dev"
]
}
]
}
这是我使用的命令
jq '.users[] | select(.username == "admin").queue += ["dev"]' file.json
但结果并不如预期
{
"username": "hive",
"queue": [
"default"
]
}
{
"username": "admin",
"queue": [
"apps",
"prod",
"dev"
]
}
为什么用户数组没有出现?我需要将它保留在结果中
通过管道,您可以将上下文向下更改为数组元素,这就是您希望选择的内容。如果你在管道和选择两边加上括号,你将保留分配,因此过滤器的输出在 top-level:
jq '(.users[] | select(.username == "admin")).queue += ["dev"]'
{
"users": [
{
"username": "karim",
"queue": [
"default"
]
},
{
"username": "admin",
"queue": [
"apps",
"prod",
"dev"
]
}
]
}