Installera verktyget jq för att söka i JSON-filer
När vi jobbar med JSON data kan filerna snabbt bli stora och svåra att överskåda och hitta informationen i. Med hjälp av ett verktyg som jq kan vi söka och visa informationen i en JSON fil.
Ett verktyg som jq kan vara bra för den webbprogrammerare som skall jobba med JSON. Artikeln visar hur du installerar och kommer igång med verktyget.
#Webbplatsen för jq
Det finns en webbplats för jq där du kan läsa manualen och det finns en tutorial som ger en översikt till verktyget.
#Testa onlinevarianten jqplay
Det finns en onlinevariant jqplay där du kan testköra verktyget via ett webbgränssnitt. Där finns också ett cheatsheets om hjälper dig att komma igång med grunderna och det finns flera inbygga exempel som hjälper dig igång.
Pröva de inbygga konstruktionera och redigera dem för att komma igång med hur du kan använda verktyget.
#Installera
Via webbplatsen ser du olika alternativ för att installera. De som jag själv väljer för våra vanligaste miljöer är följande.
För Linux/Debian med apt-get.
$ sudo apt-get install jq
För OS X med brew.
$ brew install jq
För Windows med apt-cyg.
$ apt-cyg install jq
#Använd verktyget vid terminalen
När du installerat verktyget behöver du en JSON-fil för att komma igång. Här är en JSON-fil som innehåller en översikt av lediga jobb i Sveriges alla län. Ladda ned den och börja testa.
$ wget -O af.json https://raw.githubusercontent.com/dbwebb-se/webapp/60ab93653ab2d4d26316f4585c79a93d79de3501/example/arbetsformedlingen/soklista_lan.json
Börja med att visa hjälptexten om jq samt dess manualsida.
$ jq $ man jq
För att visa innehållet i JSON-filen, med färgformattering, kan du köra följande kommando. Färgformatteringen var påslagen för mig, även utan -C
men i Cygwin behövde jag lägga till -C
för att få färgen.
$ jq '.' af.json
$ jq -C '.' af.json
Början av af.json
ser ut så här.
$ more af.json
{
"soklista": {
"listnamn": "lan",
"sokdata": [
{
"antal_ledigajobb": 740,
"antal_platsannonser": 423,
"id": 10,
"namn": "Blekinge l\u00e4n"
},
I slutet av af.json
finns det två värden som anger totalt antal lediga jobb och platsannonser.
$ tail af.json
"antal_ledigajobb": 1040,
"antal_platsannonser": 293,
"id": 90,
"namn": "Ospecificerad arbetsort"
}
],
"totalt_antal_ledigajobb": 66187,
"totalt_antal_platsannonser": 36678
}
}
Dessa värden kan jag välja ut på följande sätt.
$ jq '.soklista.listnamn' af.json
"lan"
$ jq '.soklista.totalt_antal_ledigajobb' af.json
66187
$ jq '.soklista.totalt_antal_platsannonser' af.json
36678
Ett annat sätt att se vilka nycklar som finns i objektet är med den inbyggda funktionen keys
.
$ jq 'keys' af.json
[
"soklista"
]
Vill man sedan se vilka nycklar det objektet innehåller så tittar man vidare.
$ jq '.soklista | keys' af.json
[
"listnamn",
"sokdata",
"totalt_antal_ledigajobb",
"totalt_antal_platsannonser"
]
I mitten av filen ligger en array .soklista.sokdata
som innehåller varje län i form av ett objekt. Låt se hur många rader arrayen innehåller och vad det första och sista värdet innehåller.
$ jq '.soklista.sokdata | length' af.json
22
$ jq '.soklista.sokdata[0]' af.json
{
"antal_ledigajobb": 740,
"antal_platsannonser": 423,
"id": 10,
"namn": "Blekinge län"
}
$ jq '.soklista.sokdata[21]' af.json
{
"antal_ledigajobb": 1040,
"antal_platsannonser": 293,
"id": 90,
"namn": "Ospecificerad arbetsort"
}
Låt oss lista samtliga id som finns i arrayens respektive objekt. Det är ett id för varje län.
$ jq '.soklista.sokdata[].id' af.json
Välj ut alla län vars id är större än 30.
$ jq '.soklista.sokdata[] | select(.id > 30) ' af.json
{
"antal_ledigajobb": 1040,
"antal_platsannonser": 293,
"id": 90,
"namn": "Ospecificerad arbetsort"
}
Välj ut det län som har ett id som är lika med 6.
$ jq '.soklista.sokdata[] | select(.id == 6) ' af.json
{
"antal_ledigajobb": 2556,
"antal_platsannonser": 1396,
"id": 6,
"namn": "Jönköpings län"
}
Det var ett par exempel så du kommer igång på egen hand. Kika igenom manualen så du vet vilka konstruktioner som du kan använda.
#Avslutningsvis
Ett verktyg likt jq kan vara behändigt när du jobbar med stora JSON filer och när du testar dina egna filer för att se vad de innehåller och hur du kan söka ut data ur dem.
Har du tips, förslag eller frågor om artikeln så finns det en specifik forumtråd för det.
#Revision history
- 2022-03-29: (C, efo) Uppdaterade af läkn.
- 2016-10-18: (B, mos) Fel i exempel om hitta sista länet.
- 2015-11-23: (A, mos) Första utgåvan inför kurs webapp.