Вложенные массивы, объединяющие несколько фильтров с использованием JQ - PullRequest
0 голосов
/ 23 июня 2019

У меня есть 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): Несколько фильтров с использованием JQ

Однако, хотя оба моих фильтра работают независимо, когда я объединяю их следующим образом:

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

Я получаю «ноль» за мой второй ответ.

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

Я уже несколько дней ломал голову над этим, есть идеи? Я был бы признателен, если бы мне пришлось атаковать это по-другому.

Вот ссылка на jqplay https://jqplay.org/s/By94hv9gKj

1 Ответ

1 голос
/ 23 июня 2019

Я уже несколько дней чесал голову на этом

Возможно, вы почувствуете, что хотите выдернуть волосы, когда увидите, как близко вы подошли.По сути, вам просто нужна дополнительная пара скобок:

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

За исключением того, что вы, вероятно, подразумевали "SecondItem1" для имени второго ключа.

Альтернатива

Вот меньшеповторяющееся решение, которое, возможно, стоит рассмотреть:

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