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

你好,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_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}'