rep*_*lay 16 grouping json key jq
我有一个对象列表,如下所示:
[
{
"ip": "1.1.1.1",
"component": "name1"
},
{
"ip": "1.1.1.2",
"component": "name1"
},
{
"ip": "1.1.1.3",
"component": "name2"
},
{
"ip": "1.1.1.4",
"component": "name2"
}
]
Run Code Online (Sandbox Code Playgroud)
现在,我想对组件进行分组和键入,并为每个组件分配一个ips列表:
{
"name1": [
"1.1.1.1",
"1.1.1.2"
]
},{
"name2": [
"1.1.1.3",
"1.1.1.4"
]
}
Run Code Online (Sandbox Code Playgroud)
rep*_*lay 24
我自己想通了.我首先分组.component,然后只创建由每个组的第一个对象的组件索引的新的ips列表:
jq ' group_by(.component)[] | {(.[0].component): [.[] | .ip]}'
yac*_*cob 17
接受的答案不会产生有效的 json,但是:
{
"name1": [
"1.1.1.1",
"1.1.1.2"
]
}
{
"name2": [
"1.1.1.3",
"1.1.1.4"
]
}
Run Code Online (Sandbox Code Playgroud)
name1以及name2是有效的 json 对象,但整个输出不是。
以下jq语句会产生问题中指定的所需输出:
group_by(.component) | map({ key: (.[0].component), value: [.[] | .ip] }) | from_entries
Run Code Online (Sandbox Code Playgroud)
输出:
group_by(.component) | map({ key: (.[0].component), value: [.[] | .ip] }) | from_entries
Run Code Online (Sandbox Code Playgroud)
欢迎提出更简单方法的建议。
如果人类可读性优于有效的 json,我建议像......
{
"name1": [
"1.1.1.1",
"1.1.1.2"
],
"name2": [
"1.1.1.3",
"1.1.1.4"
]
}
Run Code Online (Sandbox Code Playgroud)
...这导致...
IPs for name1: ["1.1.1.1","1.1.1.2"]
IPs for name2: ["1.1.1.3","1.1.1.4"]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5468 次 |
| 最近记录: |