A JSON a tömböt így definiálja:
A tömb értékek rendezett gyűjteménye. A tömb
[bal szögletes zárójellel kezdődik és]jobb szögletes zárójellel végződik. Az értékeket,vessző választja el.
A tömbök nulla vagy több bármilyen fajta JSON-értéket tartalmazhatnak. A tömb elemeinek nem kell mind azonos típusúnak lenniük.
Zárójelekkel elemeket gyűjthetsz tömbbe.
[1, 2, 3]
A stream elemeit úgy foglalhatod tömbbe, hogy zárójelek közé teszed.
range(5) # => a stream of 5 numbers
[range(5)] # => the array [0, 1, 2, 3, 4]
A length függvény visszaadja a tömb elemeinek számát.
A tömbök indexelése nullától kezdődik.
Egy elem kiolvasása egy tömbből zárójeles kifejezéssel történik:
.[2] a harmadik elemet adja vissza.
A negatív indexek a tömb végétől számolnak visszafelé:
.[-1] az utolsó elemet adja vissza; .[-2] az utolsó előtti elemet.
A szelet a tömb egy részsorozata.
.[10:15] 5 elemet ad vissza a 10-es indextől kezdve; a záró index nincs benne.
Van néhány kényelmi függvény:
first az első elemet adja vissza.last az utolsó elemet adja vissza.nth(n) az n indexű elemet adja vissza.Vannak helyzetek, amikor egy tömb elemeit egyenként szeretnéd streamelni.
Erre a .[] szolgál.
Tegyük fel, hogy a tömbben lévő stringek hosszaiból szeretnénk egy streamet.
["a", "be", "cat", "door"] | length # => 4 -- the number of elements in the array
["a", "be", "cat", "door"] | .[] | length # => 1, 2, 3, 4 -- the lengths of each element
Az üres zárójelek az előző kifejezés mellé helyezhetők, elhagyva a pipe operátort.
["a", "be", "cat", "door"][] | length # => 1, 2, 3, 4 -- the lengths of each element
# ........................^^
A tömbök összefűzéséhez használd a + operátort.
[1, 2, 3] + [4, 5] # => [1, 2, 3, 4, 5]
A - operátor eltávolítja a jobb oldali tömbben lévő elemeket a bal oldali tömbből.
[range(10)] - [2, 4, 6] # => [0, 1, 3, 5, 7, 8, 9]
A jq számos függvényt kínál a gyakori iterációs műveletek lefedésére:
A map(expr) egy új tömböt ad vissza, amelyben az expr minden elemre egyenként alkalmazódik.
[1, 2, 3] | map(. * 10) # => [10, 20, 30]
A select(expr) egy olyan függvény, amely az expr-t egy egyetlen értékre alkalmazza;
ha a kifejezés eredménye igaz, akkor az érték visszaadódik;
ha az eredmény hamis, semmi nem adódik vissza, nem null, hanem ténylegesen semmi.
Ahhoz, hogy ezt egy tömbre alkalmazd, kombináld a map-pal.
[range(10)] | map(select(. % 2 == 0)) # => [0, 2, 4, 6, 8]
Vagy alkalmazd a select-et egy streamre, és gyűjtsd össze az eredményeket.
[range(10) | select(. % 2 == 0)] # => [0, 2, 4, 6, 8]
Az any(condition) és az all(condition) logikai értéket ad vissza arról, hogy a tömbben lévő elemek közül bármelyik/mindegyik teljesíti-e a feltételt.
[1, 2, 3, 4] | any(. > 4) # false
[1, 2, 3, 4] | any(. >= 4) # true
[1, 2, 3, 4] | all(. >= 4) # false
[1, 2, 3, 4] | all(. <= 4) # true
Az index segítségével tesztelhetjük, hogy egy tömb tartalmaz-e egy elemet.
Ez a függvény visszaadja az adott elem indexét, ha benne van a tömbben;
egyébként a függvény null-t ad vissza.
["carrots", "beef", "potatoes"] | index("beef") # => 1
["carrots", "beef", "potatoes"] | index("bees") # => null
Van egy fordított függvény, amelynek neve IN (igen, csupa nagybetűvel).
Az IN sajátossága, hogy argumentuma nem tömb, hanem egy stream.
"beef" | IN(["carrots", "beef", "potatoes"][]) # => true
"bees" | IN(["carrots", "beef", "potatoes"][]) # => false
A Rubyban van egy hasznos each_with_index metódus, amely az elem értékét az indexével párosítja.
A Pythonban enumerate a neve.
A jq-ban van valami hasonló, to_entries néven.
Ez a tömböt {key: index, value: value} objektumok tömbjévé alakítja.
[11, 22, 33, 44] | to_entries
# => [{key: 0, value: 11}, {key: 1, value: 22}, {key: 2, value: 33}, {key: 3, value: 44}]
sort és sort_by
group_by
min, max, min_by, max_by
unique, unique_by
flatten