使用 jq 选择 JSON 元素 - 怎么做?

问题描述 投票:0回答:1

当尝试选择该数组的元素时,我正在按照在线示例进行操作,但发生了非常奇怪的事情。

当我跑步时

.issuesData.issues[] 
它按预期显示数组。很好。

然后我尝试仅选择带有

statusId == 10270
的节点。正如预期的结果,这将给我最后一个节点。

但结果是 2 个对象的数组,所有元素都分配有

statusId = 10270

.issuesData.issues[].statusId="10270"  

如果我尝试类似的稍微不同的方法

.issuesData.issues[].statusId=="10270"  

我得到一个数组

false
true

这是有道理的,因为只有第二个元素符合他的标准。但我想要得到的只是元素本身或者至少是“关键” JSON 对象如下所示。

{
  "issuesData": {
    "issues": [
      {
        "id": 3619364,
        "key": "AIG-1992",
        "hidden": false,
        "typeId": "1",
        "summary": "XXXXXX",
        "priorityId": "2",
        "done": false,
        "assignee": "XXXX",
        "assigneeName": "XXXX",
        "hasCustomUserAvatar": false,
        "autoUserAvatar": {
          "letter": "B",
          "color": "#d39c3f"
        },
        "color": "#ff0000",
        "epicId": "3557134",
        "epic": "AIG-1",
        "estimateStatisticRequired": false,
        "statusId": "10370",
        "fixVersions": [
          120044
        ],
        "projectId": 49202
      },
      {
        "id": 3617950,
        "key": "AIG-1938",
        "hidden": false,
        "typeId": "1",
        "summary": "YYYYYY",
        "priorityId": "2",
        "done": false,
        "assignee": "YYYY",
        "assigneeName": "YYY",
        "hasCustomUserAvatar": false,
        "autoUserAvatar": {
          "letter": "F",
          "color": "#7bc1a1"
        },
        "color": "#ff0000",
        "epicId": "3658470",
        "epic": "AIG-574",
        "estimateStatisticRequired": false,
        "statusId": "10270",
        "fixVersions": [],
        "projectId": 49202
      }
    ]
  }
}

我在这里做错了什么?

json jq
1个回答
0
投票

假设您想要一个具有字符串值的键的对象流

"10270"

.issuesData.issues[] | select(.statusId == "10270")

假设您想要一个包含所有匹配对象的数组

.issuesData.issues | map(select(.statusId == "10270"))

假设您想修改原始结构以仅保留匹配的对象:

.issuesData.issues |= map(select(.statusId == "10270"))

如果您只想要具有指定 statusId 的对象的 id:

.issuesData.issues[] | select(.statusId == "10270").id

如果您需要 JSON 数组形式的 ids:

.issuesData.issues | map(select(.statusId == "10270").id)
© www.soinside.com 2019 - 2024. All rights reserved.