Json 有条件地合并对象中的两个列表
你好,jq专家 我是一名jq学习者,有一个json对象,由以下列表组成:Json 有条件地合并对象中的两个列表,json,jq,Json,Jq,你好,jq专家 我是一名jq学习者,有一个json对象,由以下列表组成: { "image_files": [ { "id": "img_0001", "width": 32, "heigt": 32, "file_name": "img_0001.png" }, { "id": "img_0002", "width": 128, "heigt": 32, "file_na
{
"image_files": [
{
"id": "img_0001",
"width": 32,
"heigt": 32,
"file_name": "img_0001.png"
},
{
"id": "img_0002",
"width": 128,
"heigt": 32,
"file_name": "img_0002.png"
},
{
"id": "img_0003",
"width": 32,
"heigt": 32,
"file_name": "img_0003.png"
},
{
"id": "img_0004",
"width": 160,
"heigt": 32,
"file_name": "img_0004.png"
}
],
"annotations": [
{
"id": "ann_0001",
"image_id": "img_0001",
"label": "A",
"attributes": {
"type": "letter",
"augmented": false
}
},
{
"id": "ann_0002",
"image_id": "img_0002",
"label": "Good",
"attributes": {
"type": "word",
"augmented": false
}
},
{
"id": "ann_0003",
"image_id": "img_0003",
"label": "C",
"attributes": {
"type": "letter",
"augmented": false
}
},
{
"id": "ann_0004",
"image_id": "img_0004",
"label": "Hello",
"attributes": {
"type": "word",
"augmented": false
}
}
]
}
列表中的annotations
是引用image\u id
列表中的image\u文件
的外键id
image\u文件
和annotations
,条件是annotations.attribute.type==“letter”
期望以下输出:
{
"letter_image_files_with_label": [
{
"id": "img_0001",
"width": 32,
"heigt": 32,
"file_name": "img_0001.png",
"label": "A"
},
{
"id": "img_0003",
"width": 32,
"heigt": 32,
"file_name": "img_0003.png",
"label": "C"
}
]
}
如何从json数据输入生成上述结果?
jq手册中解释的join
似乎不使用这种任务。
有办法吗?请给我看看绳子
感谢您的慷慨阅读。使用
id
s索引image\u文件
,使这变得非常简单
INDEX(.image_files[]; .id) as $imgs | [
.annotations[]
| select(.attributes.type == "letter")
| $imgs[.image_id] + {label: .label}
]
谢谢。你救了我。伟大的非常好的解决方案@ocuz ismail,关于索引函数的文档是从哪里来的?我在jq手册或jq手册的手册页中找不到索引。有没有关于jq的实用示例的好教程?@Hongsoog:
INDEX
从jq-1.6开始提供。在官方文档中,点击JQ1.6手册-您还没有接受上述正确答案,但您继续问另一个问题?你应该相信回答者投了赞成票,并接受给予他们应有的信任。看看当有人回答我的问题时我该怎么办?当答案被“接受”时意味着什么?在帮助中心搜索最终答案<编码>'INDEX(.image_files[].id)为$imgs |[.annotations[]选择(.attributes.type==“word”)|选择(.label | length |.==4)|$imgs[.image_id]+{label:.label}'