jq:根据两个键嵌套对象
jq: nesting objects according to two keys
这是我的文件:
{
"name":"name1",
"oid1":"oid1-1",
"oid2":"oid2-1"
}{
"name":"name2",
"oid1":"oid1-2",
"oid2":"oid2-2"
}
对方:
{
"id": "id1",
"info": "info1",
"oid1":"oid1-1",
"oid2":"oid2-1"
}
{
"id": "id2",
"info": "info2",
"oid1":"oid1-1",
"oid2":"oid2-1"
}
{
"id": "id3",
"info": "info3",
"oid1":"oid1-2",
"oid2":"oid2-2"
}
我需要将上面的文档嵌套到第一个文档中:
{
"name":"name1",
"oid1":"oid1-1",
"oid2":"oid2-1",
"ids":[
{
"id":"id1",
"info":"info1"
},
{
"id":"id2",
"info":"info2"
}
]
}{
"name":"name2",
"oid1":"oid1-2",
"oid2":"oid2-2",
"ids":[
{
"id":"id3",
"info":"info3"
}
]
}
因此,我需要嵌套到第一个文档中,即 parent.oid1 == nest.oid1 && parent.oid2 == nest.oid2
。
我没去过合理的地方。
有什么想法吗?
如果“我的文档”存储在名为 mine.json
的文件中,而“另一面”是文件 others.json
的内容,则 --slurpfile
其他文件并添加它们基于 select
:
jq --slurpfile others others.json '
. as $mine
| . + {ids: ($others | map(
select(.oid1 == $mine.oid1 and .oid2 == $mine.oid2)
| {id, info}
))}
' mine.json
{
"name": "name1",
"oid1": "oid1-1",
"oid2": "oid2-1",
"ids": [
{
"id": "id1",
"info": "info1"
},
{
"id": "id2",
"info": "info2"
}
]
}
{
"name": "name2",
"oid1": "oid1-2",
"oid2": "oid2-2",
"ids": [
{
"id": "id3",
"info": "info3"
}
]
}
Demo(使用具有字段 mine
和 others
的对象而不是文件)
这是我的文件:
{
"name":"name1",
"oid1":"oid1-1",
"oid2":"oid2-1"
}{
"name":"name2",
"oid1":"oid1-2",
"oid2":"oid2-2"
}
对方:
{
"id": "id1",
"info": "info1",
"oid1":"oid1-1",
"oid2":"oid2-1"
}
{
"id": "id2",
"info": "info2",
"oid1":"oid1-1",
"oid2":"oid2-1"
}
{
"id": "id3",
"info": "info3",
"oid1":"oid1-2",
"oid2":"oid2-2"
}
我需要将上面的文档嵌套到第一个文档中:
{
"name":"name1",
"oid1":"oid1-1",
"oid2":"oid2-1",
"ids":[
{
"id":"id1",
"info":"info1"
},
{
"id":"id2",
"info":"info2"
}
]
}{
"name":"name2",
"oid1":"oid1-2",
"oid2":"oid2-2",
"ids":[
{
"id":"id3",
"info":"info3"
}
]
}
因此,我需要嵌套到第一个文档中,即 parent.oid1 == nest.oid1 && parent.oid2 == nest.oid2
。
我没去过合理的地方。
有什么想法吗?
如果“我的文档”存储在名为 mine.json
的文件中,而“另一面”是文件 others.json
的内容,则 --slurpfile
其他文件并添加它们基于 select
:
jq --slurpfile others others.json '
. as $mine
| . + {ids: ($others | map(
select(.oid1 == $mine.oid1 and .oid2 == $mine.oid2)
| {id, info}
))}
' mine.json
{
"name": "name1",
"oid1": "oid1-1",
"oid2": "oid2-1",
"ids": [
{
"id": "id1",
"info": "info1"
},
{
"id": "id2",
"info": "info2"
}
]
}
{
"name": "name2",
"oid1": "oid1-2",
"oid2": "oid2-2",
"ids": [
{
"id": "id3",
"info": "info3"
}
]
}
Demo(使用具有字段 mine
和 others
的对象而不是文件)