有JQ

2014-04-03 27 views
4

減少JSON我有對象的JSON數組:有JQ

[{key1: value},{key2:value}, ...] 

我想減少這些爲以下結構:

{key1: value, key2: value, ...} 

這是可以做到與jq

我嘗試:

cat myjson.json | jq '.[] | {(.key): value}' 

這確實因爲它遍歷每個數據,而不是把它簡化成一個對象不太工作。

+0

'貓myjson.json | jq'。[]''在一個單獨的行上輸出每個對象?如果是這樣,那麼你可以將它傳遞給其他東西(例如'sed'):'cat myjson.json | jq'。[]'| sed':a; N; $!ba; s /} \ n {/,/ g'' –

+0

@turtle在回顧老問題時,我注意到這已經有一段時間了。也許考慮標記答案接受,如果它滿足您的需求? – jq170727

回答

0

我相信下面的工作:

cat myjson.json | jq 'reduce .[] as $item ({}; . + $item)' 

它採用陣列中的每個項目,並將其添加到以前所有的項目的總和。

5

注意JQ有一個名爲「添加」,同樣的事情,第一個答案提出一個內置的功能,所以你應該能夠編寫:

jq add myjson.json 
1

要在其他兩個答案擴展位,你可以在「添加」兩個物體在一起,就像這樣:

.[0] + .[1] 

=> { "key1": "value", "key2": "value" } 

您可以使用通用的reduce功能重複應用列表的前兩個項目之間的函數,那麼結果和下一個項目之間,和等:

reduce .[] as $item ({}; . + $item) 

我們先從{},加.[0],再加入.[1]

最後,作爲一種方便,JQ有一個add功能基本上是正是這種功能的別名,所以你可以寫全東西:

add 

或者,作爲一個完整的命令行:

jq add myjson.json