Mam następujący plik „Pokemon.json”, jest to uproszczona lista Pokémonów, zawierająca ich identyfikator Pokédex, nazwę i tablicę typów obiektów.

[{
  "name": "onix",
  "id": 95,
  "types": [{
      "slot": 2,
      "type": {
        "name": "ground"
      }
    },
    {
      "slot": 1,
      "type": {
        "name": "rock"
      }
    }
  ]
}, {
  "name": "drowzee",
  "id": 96,
  "types": [{
    "slot": 1,
    "type": {
      "name": "psychic"
    }
  }]
}]

Dane wyjściowe, które próbuję osiągnąć, to wyodrębnienie wartości nazwy obiektu typu i wstawienie go do tablicy. Z łatwością mogę uzyskać tablicę wszystkich typów za pomocą

jq -r '.pokemon[].types[].type.name' pokemon.json

Ale brakuje mi kluczowej części, aby przekształcić pole nazwy w jego własną tablicę

[ {
  "name": "onix",
  "id": 95,
  "types": [ "rock", "ground" ]
}, {
  "name": "drowzee",
  "id": 96,
  "types": [ "psychic" ]
} ]

Każda pomoc doceniana, dziękuję!

2
Damocles 2 styczeń 2020, 17:01

1 odpowiedź

Najlepsza odpowiedź

W Man Stwierdza, że masz opcję użycia Map - co zasadniczo oznacza, że chodzenie nad każdym wynikiem i zwrócenie czegoś (w naszym przypadku, te same dane, konstruowane inaczej.)

Oznacza to, że dla każdego wiersza tworzysz nowy obiekt i umieszczasz w nim jakieś wartości

Zwróć uwagę, potrzebujesz innego iteratora w środku, ponieważ chcemy mieć jeden obiekt na wiersz. (po prostu musimy odwzorować wartości w inny sposób, w jaki są one teraz konstruowane).

Więc rozwiązanie może wyglądać tak:

 jq -r '.pokemon[]|{name:.name, id:.id, types:.types|map(.type.name)}' pokemon.json
2
JohnnyJS 2 styczeń 2020, 14:26