【问题标题】:Modify arrays within objects in jq修改jq中对象内的数组
【发布时间】:2021-06-11 15:59:37
【问题描述】:

我有一个对象数组,并且想要过滤 b 属性中的数组,使其仅包含与对象的 a 属性匹配的元素。

[
  {
    "a": 3,
    "b": [
      1,
      2,
      3
    ]
  },
  {
    "a": 5,
    "b": [
      3,
      5,
      4,
      3,
      5
    ]
  }
]

生产

[
  {
    "a": 3,
    "b": [
      3
    ]
  },
  {
    "a": 5,
    "b": [
      5,
      5
    ]
  }
]

目前,我已经到了

[.[] | (.a as $a | .b |= [.[] | select(. == $a)])]

这行得通,但我想知道是否有更好(更短、更易读)的方法。

【问题讨论】:

  • 我会使用map(...) 而不是[.[] | ...]。虽然不确定你所说的 better 是什么意思;怎么样更好?
  • @oguzismail 更短或更易读。

标签: json jq


【解决方案1】:

我可以想出两种方法来用更少的代码做到这一点,而且这两种方法都是你自己已经想出的变体。

  1.  map(.a as $a | .b |= map(select(. == $a)))
    
  2.  del(.[] | .a as $a | .b[] | select(. != $a))
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多