2015-06-10 119 views
1

我的老闆希望我們的團隊使用JQ來解析JSON文件。我使用的應用程序生成我需要轉換的JSON。我有一個看起來像這樣的文件:使用JQ的多個過濾器

{ 
    "Collections": [ 
     { 
      "OptionGroups": [ 
       { 
        "OptionGroupName": "Test1", 
        "Status": "in-sync" 
       } 
      ], 
      "Version": "3.4.25", 
      "InstanceIdentifier": "Dev1" 
     }, 
     { 
      "OptionGroups": [ 
       { 
        "OptionGroupName": "Test2", 
        "Status": "in-sync" 
       } 
      ], 
      "Version": "3.4.22", 
      "InstanceIdentifier": "Dev2" 
     } 
    ] 
} 

使用JQ,當我執行此:

cat json.txt | jq -r '.Collections[].OptionGroups[].OptionGroupName, .Collections[].InstanceIdentifier, .Collections[].Version' 

我得到這樣的輸出:

Test1 
Test2 
Dev1 
Dev2 
3.4.25 
3.4.22 

如何獲取輸出如下是這樣的:

Test1 Dev1 3.4.25 
Test2 Dev2 3.4.22 
+0

順便說一句,我們團隊中沒有人知道答案,這就是爲什麼我在這裏發佈我的問題。 – jago

回答

4

始終PR在使用單個表達式中使用多個[]的過濾器時請謹慎使用。如果你不小心,你可能會得到意想不到的結果。

我會轉換爲CSV(但使用不同的分隔符,選項卡)的方法。

首先將數據轉換爲您的行。

.Collections[] | { InstanceIdentifier, Version } + (.OptionGroups[] | { OptionGroupName }) 

通過這些新對象,您可以構建行值的數組並寫出行。不要將數組傳遞給@csv過濾器,只需將它們與選項卡結合使用即可。

[ .OptionGroupName, .InstanceIdentifier, .Version ] | join("\t") 
+0

謝謝,解決了這個問題,所以我接受了答案。我們使用jq 1.3,所以我不能使用「join」,但@csv生成的輸出可以使用。 – jago

+0

你可以發佈實現上述解決方案的完整命令嗎? –