jq: select 只有 JSON 数组中的对象中的标量?

jq: select only scalars in objects in JSON array?

我有以下 JSON 数据结构,我想使用 jq 进行过滤:

{
 "data": [
  {
   "id": "blah",
   "foo": "bar",
   "array": [ ... ]
  },
  {
   "id": "blah",
   "foo": "bar"
   "array": [ ... ]
  }
 ]
}

我想将其映射到一个对象数组,每个对象中只有顶级标量值(即包含数组和对象等值的键应该消失——我对任何内容都不感兴趣嵌套在这里):

[
  {
   "id": "blah",
   "foo": "bar"
  },
  {
   "id": "blah",
   "foo": "bar"
  }
]

这应该可以通过 jqmapselect 运算符与 scalars 的某种组合来实现,但我无法找出确切的答案解决方案。我希望答案简单得令人尴尬。比如我试过.data[] | map(select(scalars))

我使用的是最新版本的jq

with_entries 内置函数让您 select 在保留对象字段结构的同时获取值。

jq '.data | map(with_entries(select(.value | scalars)))'
[
  {
    "id": "blah",
    "foo": "bar"
  },
  {
    "id": "blah",
    "foo": "bar"
  }
]

Demo

你可以做到

[.data[] | to_entries | map(select(.value | scalars)) | from_entries]

演示

https://jqplay.org/s/Y7-_8J-DFt

相同
[.data[] | with_entries(select(.value | scalars))]

演示

https://jqplay.org/s/ZjMBXMYeBC