【问题标题】:Select value from array json using jq使用 jq 从数组 json 中选择值
【发布时间】:2025-11-21 09:15:02
【问题描述】:

我有下面这个值的json文件

{
  "data": [
      {
          "id": 60573936,
          "timeCreated": 1615458564202,
          "timeUpdated": 1615458564202,
          "name": "name1",
          "desiredStatus": "UNMANAGED",
          "defaultStatus": "STARTED",
          "targets": [
              {
                  "id": 2520949,
                  "lastReportedStatus": "STOPPED"
              }, {
                  "id": 702881,
                  "lastReportedStatus": "STARTED"
              }
          ]
      }, {
          "id": 60574370,
          "timeCreated": 1615458812565,
          "timeUpdated": 1615458812565,
          "name": "name2",
          "desiredStatus": "UNMANAGED",
          "defaultStatus": "STARTED",
          "targets": [
              {
                  "id": 2520949,
                  "lastReportedStatus": "STARTED"
              }, {
                  "id": 702881,
                  "lastReportedStatus": "STOPPED"
              }
          ]
      }, {
          "id": 60574329,
          "timeCreated": 1615458775053,
          "timeUpdated": 1615458775053,
          "name": "name3",
          "desiredStatus": "UNMANAGED",
          "defaultStatus": "STARTED",
          "targets": [
              {
                  "id": 2520949,
                  "lastReportedStatus": "STOPPED"
              }, {
                  "id": 702881,
                  "lastReportedStatus": "STARTED"
              }
          ]
      }
    ]
  }

我想仅在“id”=“2520949”和“lastReportedStatus”=“STOPPED”使用 jq 时提取“名称”值。在我的示例中,我想获得“name1”和“name3”。我尝试使用选择功能,但无法满足“id”和“lastReportedStatus”键之间的“and”条件。 jq 的正确代码是什么?

【问题讨论】:

    标签: json jq


    【解决方案1】:
    jq '.data[] 
        | select(.targets[] | .lastReportedStatus=="STOPPED" and .id==2520949)
        | .name' file.json
    

    【讨论】:

    • * 上的“谢谢” = 赞成/接受 :-)