Итерация по массиву и получение нескольких значений - PullRequest
0 голосов
/ 11 июля 2020

У меня есть файл json со следующей структурой:

{
    "category": 
    {
        "subcategory": 
            [
                {
                    "id": "1", 
                    "val": "blue",
                    "foo": "blahblah", 
                    "bar": "blahblah"

                },
                {   
                    "id": "2", 
                    "val": "red"
                    "foo": "blahblah", 
                    "bar": "blahblah"
                }
            ]
    }
}

Я хочу преобразовать его в:

{   
    subcategories
    [
        {"id": "1","val": "blue"}
        {"id": "2","val": "red"}
    ]

}

Ближайшее, что мне удалось получить с

cat input.json | jq -c '.[] | \
    {id: .category.subcategory[].id, \
    value: .category.subcategory[].val}' \
    > output.json

Не работает, но близко:

  1. У меня нет узла subcategories.
  2. id всегда первое значение - IOW, 1

Любая помощь была бы замечательной!

спасибо !!!

1 Ответ

0 голосов
/ 11 июля 2020

В вашем вводе уже есть нужный массив, поэтому ваша программа jq может быть такой же простой, как:

{subcategories: .category.subcategory }

или, если вы хотите сохранить только ключи «id» и «val»:

{subcategories: .category.subcategory | map({id,val}) }

Если (и / или когда) вы решите использовать итерацию, убедитесь, что у вас не слишком много итераторов.

...