使用JQ为没有命名属性的嵌套json文件提取对象
我有一个生成的文件(来自AmazonCLI),希望提取一些属性。通常这对于JQ来说很简单,但是JSON文件没有命名的顶级属性使用JQ为没有命名属性的嵌套json文件提取对象,json,jq,Json,Jq,我有一个生成的文件(来自AmazonCLI),希望提取一些属性。通常这对于JQ来说很简单,但是JSON文件没有命名的顶级属性 [ [ { "State": "running", "Type": "c4.xlarge", "ID": "i-somehere", "Env": [ "prd" ],
[
[
{
"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提取 如果它们只是您感兴趣的对象数组的数组,您可以通过遍历每个数组将其展平为对象。然后得到你想要的属性
.[][] | { State, Env, Name }
如果希望所有对象都具有这三个属性,无论对象出现在何处,都可以使用
。
。例如,对于给定的输入
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"
]
}
谢谢你。无论节点在层次结构中的何处,这都非常有效。