首页 > 解决方案 > 使用 jq 根据条件从 json 中删除键

问题描述

我知道有很多类似的解决方案,但没有一个符合我的情况。我有这个json:

{
  "page": 1,
  "per_page": 20,
  "total": 3,
  "saved_objects": [
    {
      "type": "dashboard",
      "id": "f3ea5f20-e773-11ea-8cae-c1046c8b1215"
    },
    {
      "type": "dashboard",
      "id": "5c071f30-e797-11ea-8cae-c1046c8b1215"
    },
    {
      "type": "dashboard",
      "id": "644a15c0-e79d-11ea-8cae-c1046c8b1215"
    }
  ]
}

如果 id == "f3ea5f20-e773-11ea-8cae-c1046c8b1215" 或 id == "5c071f30-e797-11ea-8cae-c1046c8b1215" 我想删除这个键,所以输出应该是:

{
  "page": 1,
  "per_page": 20,
  "total": 3,
  "saved_objects": [
    {
      "type": "dashboard",
      "id": "644a15c0-e79d-11ea-8cae-c1046c8b1215"
    }
  ]
}

我试过了:

jq 'select(.saved_objects[].id != "f3ea5f20-e773-11ea-8cae-c1046c8b1215" and .saved_objects[].id != "5c071f30-e797-11ea-8cae-c1046c8b1215")'

和很多变化,但没有任何效果。我究竟做错了什么?

谢谢你的帮助。

标签: jsonjq

解决方案


你很亲密。

jq '.saved_objects=(
        .saved_objects[] |
            select (.id != "f3ea5f20-e773-11ea-8cae-c1046c8b1215"
                    and .id != "5c071f30-e797-11ea-8cae-c1046c8b1215"))
    ' file.json

推荐阅读