2016-05-23 30 views
0

我有一个生成的文件(来自amazon CLI)并希望提取一些属性。通常这对于JQ来说很简单,但是JSON文件没有命名的顶级属性。使用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" 
      ] 
     } 
    ] 
] 

.....我想提取状态,Env和名称....这应该是简单的JQ。“[]。国家” ......然而,国家嵌套在一个对象这是没有命名的。我怎样才能用JQ提取?

回答

0

如果他们只是你感兴趣的对象的数组的数组,你可以通过遍历每个阵列压平下降到只有的对象。然后获得你想要的属性。

.[][] | { State, Env, Name } 
0

如果您希望有任何人的所有对象的三个属性,无论身在何处的对象时,您可以使用..。例如,对于给定的输入,

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" 
    ] 
} 
+0

三江源。无论节点在层次结构中何处,这都很好用。 – user1351155