使用 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
在当前案例中看到的数组包装器删除了对象包装器
你是如此亲密:
$ 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
我将其存储为文件:
{
"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
在当前案例中看到的数组包装器删除了对象包装器
你是如此亲密:
$ 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