2016-11-22 50 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}