是否可以使用jq进行sort_by再次按子项进行sort_by

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

我有以下json:

[
  {
    "SG": [
      {
        "Id": "17",
        "GroupName": "fistGN",
        "Permissions": [
          {
            "Port": 80,
            "Protocol": "tcp"
          },
          {
            "Port": 8080,
            "Protocol": "tcp"
          },
          {
            "Port": 5080,
            "Protocol": "tcp"
          }
        ]
      },
      {
        "Id": "1",
        "GroupName": "secondGN",
        "Permissions": [
          {
            "Port": 80,
            "Protocol": "tcp"
          },
          {
            "Port": 8080,
            "Protocol": "tcp"
          },
          {
            "Port": 5080,
            "Protocol": "tcp"
          }
        ]
      }
    ]
  }
]

是否可以使用单个命令通过权限端口sort_by GroupName然后为每个组?

这是我正在尝试做但但是没有按预期工作:

jq -s -S '.[].SG |= sort_by(.GroupName, .Permissions[].Port)' myfile.json
json sorting jq
1个回答
2
投票

jq解决方案:

jq '.[0].SG |= (map(.Permissions |= sort_by(.Port)) | sort_by(.GroupName))' myfile.json
  • (map(.Permissions |= sort_by(.Port)) | sort_by(.GroupName)) - 用于分隔2个排序操作的复合表达式: map(.Permissions |= sort_by(.Port)) - 获取一个新数组,其中每个内部.Permissions数组按键"Port"值排序 sort_by(.GroupName) - 按SG键排序"GroupName"数组项目

输出:

[
  {
    "SG": [
      {
        "Id": "17",
        "GroupName": "fistGN",
        "Permissions": [
          {
            "Port": 80,
            "Protocol": "tcp"
          },
          {
            "Port": 5080,
            "Protocol": "tcp"
          },
          {
            "Port": 8080,
            "Protocol": "tcp"
          }
        ]
      },
      {
        "Id": "1",
        "GroupName": "secondGN",
        "Permissions": [
          {
            "Port": 80,
            "Protocol": "tcp"
          },
          {
            "Port": 5080,
            "Protocol": "tcp"
          },
          {
            "Port": 8080,
            "Protocol": "tcp"
          }
        ]
      }
    ]
  }
]
© www.soinside.com 2019 - 2024. All rights reserved.