我有一个生成的文件(来自amazon CLI)并希望提取一些属性。通常,使用JQ会很简单,但JSON文件没有命名的顶级属性。
[
[
{
"State": "running",
"Type": "c4.xlarge",
"ID": "i-somehere",
"Env": [
"prd"
],
"Name": [
"some url here"
]
}
],
[
{
"State": "stopped",
"Type": "c4.xlarge",
"ID": "i-somehere",
"Env": [
"prd"
],
"Name": [
"some url here"
]
}
],
[
{
"State": "running",
"Type": "c4.2xlarge",
"ID": "i-somehere",
"Env": [
"prd"
],
"Name": [
"some url here"
]
}
]
]
.....我想提取州,环境和名称....这应该是简单的jq"。[]。州" ...但是State嵌套在一个没有命名的对象中。如何用JQ提取?
答案 0 :(得分:1)
如果您希望所有具有任何对象的对象具有三个属性,则无论对象出现在何处,都可以使用..
。例如,对于给定的输入,
jq '.. | objects | select(has("State") or has("Env") or has("Name")) | {State, Env, Name}'
产生
{
"State": "running",
"Env": [
"prd"
],
"Name": [
"some url here"
]
}
{
"State": "stopped",
"Env": [
"prd"
],
"Name": [
"some url here"
]
}
{
"State": "running",
"Env": [
"prd"
],
"Name": [
"some url here"
]
}
答案 1 :(得分:0)
如果它们只是您感兴趣的对象数组的数组,则可以通过遍历每个数组将其展平为对象。然后获得你想要的属性。
.[][] | { State, Env, Name }