2016-05-23 51 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