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"
}
]
这应该可以通过 jq
的 map
和 select
运算符与 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"
}
]
你可以做到
[.data[] | to_entries | map(select(.value | scalars)) | from_entries]
演示
https://jqplay.org/s/Y7-_8J-DFt
与
相同
[.data[] | with_entries(select(.value | scalars))]
演示
我有以下 JSON 数据结构,我想使用 jq
进行过滤:
{
"data": [
{
"id": "blah",
"foo": "bar",
"array": [ ... ]
},
{
"id": "blah",
"foo": "bar"
"array": [ ... ]
}
]
}
我想将其映射到一个对象数组,每个对象中只有顶级标量值(即包含数组和对象等值的键应该消失——我对任何内容都不感兴趣嵌套在这里):
[
{
"id": "blah",
"foo": "bar"
},
{
"id": "blah",
"foo": "bar"
}
]
这应该可以通过 jq
的 map
和 select
运算符与 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"
}
]
你可以做到
[.data[] | to_entries | map(select(.value | scalars)) | from_entries]
演示
https://jqplay.org/s/Y7-_8J-DFt
与
相同[.data[] | with_entries(select(.value | scalars))]
演示