展平对象中的数组

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

【讨论】:

以上是关于展平对象中的数组的主要内容,如果未能解决你的问题,请参考以下文章