Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JQ为没有命名属性的嵌套json文件提取对象_Json_Jq - Fatal编程技术网

使用JQ为没有命名属性的嵌套json文件提取对象

使用JQ为没有命名属性的嵌套json文件提取对象,json,jq,Json,Jq,我有一个生成的文件(来自AmazonCLI),希望提取一些属性。通常这对于JQ来说很简单,但是JSON文件没有命名的顶级属性 [ [ { "State": "running", "Type": "c4.xlarge", "ID": "i-somehere", "Env": [ "prd" ],

我有一个生成的文件(来自AmazonCLI),希望提取一些属性。通常这对于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提取

如果它们只是您感兴趣的对象数组的数组,您可以通过遍历每个数组将其展平为对象。然后得到你想要的属性

.[][] | { 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"
  ]
}

谢谢你。无论节点在层次结构中的何处,这都非常有效。