json - 嵌套数组,使用 JQ 组合多个过滤器
问题描述
我有一些 JSON,其中包含我要收集的每件东西的嵌套数组。
我在这里提炼了它:
[
[
{
"Item":"FIRST",
"items":[
{
"firstitem1":"Item 1",
"firstitem2":"Item 2"
}
]
}
],
[
{
"Item":"SECOND",
"items":[
{
"seconditem1":"Second Item 1",
"seconditem2":"Second Item 2"
}
]
}
]
]
所需的输出如下所示:
{
"FirstItem1": "Item 1",
"SecondItem1": "Second Item 1"
}
我可以使用单独返回每个项目
.[0] | {FirstItem1: .[0].items[0].firstitem1}
.[1] | {seconditem: .[0].items[0].seconditem1}
我发现了一个类似的问题,它解释了您可以使用 filter + (filter) 之类的东西连接过滤器: Multiple filters using JQ
然而,虽然我上面的两个过滤器都是独立工作的,但当我以这种方式连接它们时:
.[0] | {FirstItem1: .[0].items[0].firstitem1} + (.[1] | {seconditem: .[0].items[0].seconditem1})
我的第二个回复为“空”。
{
"FirstItem1": "Item 1",
"seconditem": null
}
这几天我一直在挠头,有什么想法吗?如果我应该以不同的方式进行攻击,我将不胜感激。
这是一个 jqplay 链接 https://jqplay.org/s/By94hv9gKj
解决方案
这几天我一直在挠头
当你看到你离得有多近时,你可能会想拔掉一些头发。基本上,您只需要一对额外的括号:
(.[0] | {FirstItem1: .[0].items[0].firstitem1}) +
(.[1] | {seconditem: .[0].items[0].seconditem1})
除非您可能将“SecondItem1”作为第二个键名。
替代
这是一个重复性较低的解决方案,可能值得考虑:
[.[][] | .items[0]]
| {FirstItem1: first(.[0][]), SecondItem1: first(.[1][])}
推荐阅读
- angular - 将 extraRoutes 放在单独的文件中以在 Scully 中进行多个配置会导致导入错误
- python - AttributeError: 'builtin_function_or_method' 对象没有属性 'split' - 反向后门
- javascript - 显示与其他 div 的属性匹配的 div 值
- python - 你能用鸽子注释文件夹中的所有图像吗
- apache-nifi - 如何使用 Nifi QueryRecord 在流文件中查找值?
- javascript - Node.js Axios 使用 cookie 向 API 发送请求
- visual-studio-code - 有没有办法在文件代码中隐藏不推荐使用的方法?
- javascript - 如何在 jQuery 中根据按钮单击为 div 添加增量编号
- python - 双向转换时代
- python - 如何在django测试框架中模拟两个并行请求