gpt4 book ai didi

json - jq 按数组中的属性分组

转载 作者:行者123 更新时间:2023-12-04 16:16:27 26 4
gpt4 key购买 nike

我有一个输入 json 文档:

[
{
"Name": "one",
"Tags": [
{
"Key": "Name",
"Value": "important"
},
{
"Key": "OtherTag",
"Value": "irrelevant"
}
]
},
{
"Name": "two",
"Tags": [
{
"Key": "OtherTag",
"Value": "irrelevant2"
},
{
"Key": "Name",
"Value": "important"
}
]
},
{
"Name": "three",
"Tags": [
{
"Key": "Name",
"Value": "important2"
},
{
"Key": "OtherTag",
"Value": "irrelevant3"
}
]
}
]

我想使用 jq 按标签值对三个记录进行分组,其中 Key = "Name"。结果将是两个数组,一个有两条记录,一个有一条。具有两条记录的数组将有两条,因为两条记录共享具有“重要”值的相同标签。结果如下:

[
[
{
"Name": "one",
"Tags": [
{
"Key": "Name",
"Value": "important"
},
{
"Key": "OtherTag",
"Value": "irrelevant"
}
]
},
{
"Name": "two",
"Tags": [
{
"Key": "OtherTag",
"Value": "irrelevant2"
},
{
"Key": "Name",
"Value": "important"
}
]
},
],
[
{
"Name": "three",
"Tags": [
{
"Key": "Name",
"Value": "important2"
},
{
"Key": "OtherTag",
"Value": "irrelevant3"
}
]
}
]
]

我只是不知道如何使用 jq 来做到这一点。有人有什么想法吗?

最佳答案

您提出的解决方案很好,但如果您不介意将键值对数组转换为对象,则可以使用以下方法:

map( .Tags |= from_entries ) | group_by(.Tags.Name) 

这至少使“group_by”易于理解;此外,很容易将 .Tags 对象转换回键值对(使用小写的“键”和“值”):

map( .Tags |= from_entries ) | group_by(.Tags.Name)
| map(map( .Tags |= to_entries))

键/值资本化

恢复大写键/值标签的一种方法是按如下方式调整上述内容:

def KV: map( {Key: .key, Value: .value} );

map( .Tags |= from_entries ) | group_by(.Tags.Name)
| map(map( .Tags |= (to_entries | KV)))

关于json - jq 按数组中的属性分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32897445/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com