使用jq,我想将一个(嵌套的)对象数组扁平化为一个字符串数组。
例如,给定输入
{
"message-id": 1,
"result": {
"info": {
"id": 1,
"name": "foobar",
"route": [
{
"nodeid": 1,
"nodename": "name-1"
},
{
"nodeid": 2,
"nodename": "name-2"
}
]
}
}
}
字符串
我想把它交给
{
"name": "foobar",
"route": [
"name-1",
"name-2"
]
}
型
但是我正在努力使route
节点变平--没有比
.result.info | { name: .name, route: .route }
型
这基本上保持了路由节点不变。这可能很简单,但目前我还不清楚。
3条答案
按热度按时间azpvetkf1#
下面是另一个变体,与您的尝试相同,加上一个修改
route
的步骤:字符串
chhqkbe12#
这里有一种方法你可以做到这一点,这是非常接近你的尝试。
字符串
输出示例:
型
在jqplay.org上试试。
tez616oj3#
目前还不完全清楚,是什么决定了你想要在哪个级别上收集(例如,你正在使用
.result.info
字面上),以及收集到哪些字段(或者为什么.id
不会得到一个空数组),但这可能会帮助你沿着你的道路:使用
..
可以递归地扫描文档树,strings
过滤字符串,[…]
将结果收集到一个数组中。此外,我使用map_values
替换对象中所有字段的值。可以随意将其更改为您需要的字段。例如,您可以删除空数组或将一项数组更改为一个字符串本身。个字符
Demo