展平对象中的数组

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

【讨论】:

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

使用 jq 为 JSON 对象的嵌套数组中的属性展平数组

将嵌套的 JSON 对象展平并排序到 javascript 中的数组中

雪花中具有多个 JSON 对象的横向展平数组

展平数组内的对象

将带有数组的 json 结构展平为多个没有数组的平面对象

展平字典中的嵌套数组