使用 jq 我想在 json 对象中输出 json 对象,包括键而不仅仅是值

using jq I want to output json object within a json object including the keys not just the value

我将其存储为文件:

{
  "Targets": [
    {
      "Id": "xxx_hourly_cron",
      "Arn": "arn:aws:ecs:eu-west-2:000000000000:cluster/drupal-cluster",
      "RoleArn": "arn:aws:iam::000000000000:role/ecsEventsRole",
      "EcsParameters": {
        "TaskDefinitionArn": "arn:aws:ecs:eu-west-2:000000000000:task-definition/xxx-cron:55",
        "TaskCount": 1,
        "EnableECSManagedTags": false,
        "EnableExecuteCommand": false,
        "PropagateTags": "TASK_DEFINITION"
      }
    }
  ]
}

使用 bash 和 jq 我想 trim 如下:

{
  "TaskDefinitionArn": "arn:aws:ecs:eu-west-2:000000000000:task-definition/xxx-cron:55",
  "TaskCount": 1,
  "EnableECSManagedTags": false,
  "EnableExecuteCommand": false,
  "PropagateTags": "TASK_DEFINITION"
}

我已经试过了,但它没有输出密钥:

cat rule-target.json | jq '(.Targets[] .EcsParameters[])'

我想你想要:

jq '(.Targets[]|.EcsParameters)' rule-target.json

这导致:

{
  "TaskDefinitionArn": "arn:aws:ecs:eu-west-2:000000000000:task-definition/xxx-cron:55",
  "TaskCount": 1,
  "EnableECSManagedTags": false,
  "EnableExecuteCommand": false,
  "PropagateTags": "TASK_DEFINITION"
}

您可以使用

jq '.Targets[] | .EcsParameters' rule-target.json

Demo

在当前案例中看到的数组包装器删除了对象包装器

你是如此亲密:

$ jq '.Targets[].EcsParameters' rule-target.json 
{
  "TaskDefinitionArn": "arn:aws:ecs:eu-west-2:000000000000:task-definition/xxx-cron:55",
  "TaskCount": 1,
  "EnableECSManagedTags": false,
  "EnableExecuteCommand": false,
  "PropagateTags": "TASK_DEFINITION"
}

由于 EcsParameters 不是数组,因此您不应将其解包 ([])。

通常在执行cat file | cmd时使用cat是无用的,许多命令将文件作为参数:

cmd -flag -flag2 file1.txt file2.txt

如果他们不这样做,那么您可以重定向标准输入:

cmd -flag -flag2 < file1.txt