展平对象中的数组
Posted
技术标签:
【中文标题】展平对象中的数组【英文标题】:Flatten Array In Object 【发布时间】:2017-04-06 09:33:57 【问题描述】:是否有一种优雅的方法可以为其中的每个数组项复制一个对象?
printf '"a":"","b":[,]' | jq 'a:.a,b:.b[]'
"a":"","b":
"a":"","b":
【问题讨论】:
你有什么问题? 需要手动重建对象。 freenode 上的某个人确实提出了一个很好的建议。虽然它仍然需要手动重建对象,但它更优雅一点:.b=.b[]。 好吧,如果您的目标是将对象的内部数组拆分为新的单独对象,那么您当然将不得不“重建”新对象。 你如何定义“优雅”? 【参考方案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
【讨论】:
以上是关于展平对象中的数组的主要内容,如果未能解决你的问题,请参考以下文章