【问题标题】: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[]。
  • 好吧,如果您的目标是将对象的内部数组拆分为新的单独对象,那么您当然将不得不“重建”新对象。 如何定义“优雅”?

标签: arrays json jq flatten


【解决方案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}

【讨论】:

    猜你喜欢
    • 2021-12-29
    • 2021-12-25
    • 2021-03-22
    • 2017-05-13
    • 2018-02-24
    • 2015-05-23
    • 2023-01-11
    • 2019-12-17
    • 2020-07-19
    相关资源
    最近更新 更多