嵌套数组,使用JQ组合多个过滤器

时间:2019-06-23 01:10:00

标签: json filter 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})

我的第二个回答是“ null”。

{
  "FirstItem1": "Item 1",
  "seconditem": null
}

几天来,我一直在挠头,有什么想法吗?如果我应采取不同的进攻方式,我将不胜感激。

这是一个jqplay链接 https://jqplay.org/s/By94hv9gKj

1 个答案:

答案 0 :(得分:1)

  

我已经为此抓了几天

当您看到距离有多近时,您可能会想拔些头发。基本上,您只需要再加上一对括号即可:

(.[0] | {FirstItem1: .[0].items[0].firstitem1}) + 
(.[1] | {seconditem: .[0].items[0].seconditem1})

除了您可能第二个键名的意思是“ SecondItem1”。

替代

这是一个不太重复的解决方案,可能值得考虑:

[.[][] | .items[0]]
| {FirstItem1: first(.[0][]), SecondItem1: first(.[1][])}