2016-11-22 48 views
0

是否有一種優雅的方式來複制每個數組項目中的對象?壓扁數組在對象中

printf '{"a":"","b":[{},{}]}' | jq '{a:.a,b:.b[]}' 
{"a":"","b":{}} 
{"a":"","b":{}} 
+1

什麼你有什麼不對? –

+0

它需要手動重建對象。 freenode上有人提出了一個很好的建議。雖然它仍然需要手動重建對象,但它更優雅一些:.b = .b []。 –

+0

那麼,如果你的目標是將對象的內部數組分割成新的獨立對象,當然你將不得不「重建」新的對象。 _you_如何定義「優雅」? –

回答

1

這裏的擴大的任意JSON對象的所有數組值密鑰的編程方法:

def blowup(a): 
    def b(f): {(f): (.[f] | if type == "array" then .[] else . end)}; 

    if a|length == 0 then {} else b(a[0]) + blowup(a[1:]) end; 

blowup(keys) 

實施例:

輸入:{A:0,B:[1,2 ],C:[3,4]}

輸出:

{"a":0,"b":1,"c":3} 
{"a":0,"b":2,"c":3} 
{"a":0,"b":1,"c":4} 
{"a":0,"b":2,"c":4}