Како трансформисати JSON податке са jq

Uvod

JSON (JavaScript Object Notation) je široko rasprostranjen format za razmenu podataka koji se koristi u različitim veb aplikacijama i API-jima. Njegova jednostavnost čitanja i efikasnost u prenosu složenih struktura podataka čine ga popularnim izborom. Međutim, opcije za obradu JSON podataka direktno iz komandne linije su ograničene. Tu na scenu stupa jq, moćan alat komandne linije koji nudi obimnu kolekciju operatora za manipulaciju i transformaciju JSON struktura. U ovom vodiču ćemo istražiti kako koristiti jq za transformaciju JSON podataka, čineći naše komande prilagodljivijim i efikasnijim.

Operatori selekcije

Jedna od ključnih prednosti jq je njegov set operatora za selekciju, koji vam omogućavaju da precizno pretražujete i filtrirate JSON strukture.

Operator tačke (.)

Operator tačke koristi se za pristup vrednostima u okviru JSON objekata i elementima u nizovima. Može se upotrebiti za dobijanje specifičnih vrednosti ili kreiranje novih objekata.

jq
{ "ime": "Jovan", "prezime": "Petrović" }

Pristup polju „ime“

.ime

Kreiranje novog objekta sa poljima „ime“ i „puno_ime“

{ "ime": .ime, "puno_ime": .ime + " " + .prezime }

Operator uglastih zagrada ([])

Operator uglastih zagrada služi za pristup elementima niza. Broj u zagradama predstavlja indeks elementa u nizu, gde indeksiranje počinje od 0.

jq
["Jovan", "Petar", "Marija"]

Pristup prvom elementu niza

.[0]

Pristup elementu sa indeksom 2 (treći element)

.[2]

Operator uglastih zagrada sa filterima

Operator uglastih zagrada može se koristiti zajedno sa filterima kako bi se izdvojili određeni elementi iz niza. Filteri se navode unutar zagrada, a evaluacija se vrši s leva na desno.

jq
["Jovan", "Petar", "Marija"]

Izaberi elemente koji počinju sa „P“

.[] | select(.startswith("P"))

Operatori transformacije

Pored operatora selekcije, jq nudi i moćne operatore transformacije koji vam omogućavaju da menjate strukturu i sadržaj JSON podataka.

Operator cevi (|)

Operator cevi se koristi za prosleđivanje rezultata jednog operatora kao ulaza za drugi. Ovo olakšava sekvenciranje transformacija i pisanje kompleksnijih komandi.

jq
{ "ime": "Jovan", "prezime": "Petrović" }

Pretvori u mala slova i dodaj prefiks „Gospodin“

. | tolower | . + " Господин"

Operator filtera (select)

Operator filtera se koristi za filtriranje JSON podataka prema datom uslovu. Uslov se navodi unutar zagrada, a evaluacija se vrši s leva na desno.

jq
["Jovan", "Petar", "Marija"]

Izaberi imena koja su duža od 5 slova

.[] | select(.length > 5)

Operator smanjenja (reduce)

Operator smanjenja se koristi za primenu funkcije smanjenja na nizove ili objekte kako bi se dobila jedinstvena rezultujuća vrednost. Funkcija smanjenja se navodi unutar zagrada, a evaluacija se vrši s leva na desno.

jq
[1, 2, 3, 4, 5]

Saberi sve elemente niza

reduce .[] as $acc (0; $acc + .)

Primeri transformacije

Pretvaranje JSON teksta u CSV

jq
jq -r 'fromstream(1|truncate_stream(inputs)) | .[] | . | @csv' input.json > output.csv

Izdvajanje samo određenih polja

jq
jq -r '.[] | {ime, prezime}' input.json

Promena naziva polja

jq
jq -r 'fromstream(1|truncate_stream(inputs)) | .[] | {"novo_ime": .ime, "staro_ime": .prezime}' input.json

Grupisanje podataka po polju

jq
jq -r 'group_by(.tip) | {tip: .[0].tip, broj: length}' input.json

Zaključak

jq je izuzetno moćan i fleksibilan alat koji znatno unapređuje mogućnosti transformacije JSON podataka. Sa svojom bogatom paletom operatora za selekciju i transformaciju, jq vam omogućava da efikasno manipulišete kompleksnim JSON strukturama, prilagođavate komande i izdvajate korisne informacije iz podataka.

Često postavljana pitanja

Šta je jq?
jq je alat komandne linije dizajniran za obradu JSON podataka, nudeći moćne operatore za selekciju, transformaciju i filtriranje.

Koje su prednosti korišćenja jq?
jq omogućava jednostavnu i efikasnu transformaciju i manipulaciju JSON podataka, čineći komande prilagodljivijim i informativnijim.

Kako se instalira jq?
Proces instalacije jq zavisi od vašeg operativnog sistema. Detaljna uputstva možete pronaći na zvaničnoj veb stranici jq.

Koji su osnovni operatori jq?
Osnovni operatori jq uključuju operator tačke (.) za pristup poljima, operator uglastih zagrada ([]) za pristup elementima niza i operator cevi (|) za prosleđivanje rezultata.

Koji su najčešći slučajevi upotrebe jq?
jq se često koristi za izdvajanje i manipulaciju poljima JSON podataka, filtriranje podataka po određenim kriterijumima i pretvaranje JSON podataka u druge formate.

Gde mogu pronaći više informacija o jq?
Zvanična veb stranica jq nudi detaljnu dokumentaciju, uključujući uputstva za upotrebu, referentne materijale i primere.

Koje su alternative jq?
Alternative jq uključuju JMESPath, JSONPath, XPath i XSLT.

Kako mogu dobiti pomoć za korišćenje jq?
Za pomoć u korišćenju jq, možete se obratiti zvaničnoj dokumentaciji, pretraživati forume ili postavljati pitanja u zajednicama za razvoj softvera.