Zrovna tento týden jsem potřeboval exportovat nějaká data z webu s Drupalem do čitelné podoby pro někoho z marketingu. A co si budeme povídat, JSON není čitelná podoba pro většinu našich kolegů, kteří se okolo webu točí spíše ve spojitosti s byznysem.
V mém případě se mi ale nechtělo na web, který bude končit, přidávat další modul pro export do jiného formátu, než umí Drupal sám o sobě. A nemusí jít jenom o Drupal. Do JSON vystavuje nativně svoje data třeba oblíbený WordPress.
Představte si, že budete chtít vypsat seznam všech článků s jejich URL a titulkama do Excelu. Ne, není na to potřeba stopadesátý plugin.

Co je to jq a kde jej stáhnete
Nástroj jq je jednoduchá aplikace pro příkazový řádek napsaná v jazyku C, nemá žádné další závislosti a snadno si ji nainstalujete přes balíčkovací systém ve svém Linuxu, jednoduše si ji stáhnete do Windows a spustíte ji také na MacOS. Já ji zde instaloval přes brew prostým příkazem brew install jq.
Seznam všech podporovaných balíčkovacích nástrojů a stažení pro všechny platformy najdete na oficiálních stránkách jq.
Smyslem existence jq je snadné zpracování souborů ve formátu JSON. Protože běží na příkazovém řádku, skvěle se hodí do řetězení příkazů třeba ve spojení s curl pro stažení dat z nějaké adresy. Jistě jq využijete i pro skriptování nějakých úloh.
Jak parsovat JSON pomocí jq
Pro ukázku si vezmeme nějaký web na WordPressu a seznam jeho článků. Ten by se typicky měl exportovat do JSON na adrese /wp-json/wp/v2/posts. Po instalaci jq do vašeho systému ji tedy zkuste zavolat příkazem:
curl 'https://…….cz/wp-json/wp/v2/posts' | jq '.'
Tím se vám vypíše seznam všech článků v exportu (bude jich tam většinou deset), ovšem včetně nejrůznějších podrobností, které tam WordPress ukládá.
Zkusme drobnou modifikaci:
curl 'https://…….cz/wp-json/wp/v2/posts' | jq '. [0]'
Získáme data jen o prvním záznamu (jq si to čísluje od nuly).
Pokud nás z celého výstupu zajímají jenom konkrétní položky/vlastnosti jednotlivých článků, můžeme je specifikovat:
curl 'https://…...cz/wp-json/wp/v2/posts' | jq '. [0] | { nadpis: .title.rendered, url: .link}'
curl 'https://…...cz/wp-json/wp/v2/posts' | jq '. [] | { nadpis: .title.rendered, url: .link}'
Jak vidíte, vždy zadáte své vlastní pojmenování s dvojtečkou a pak cestu k položce v JSON struktuře. V druhé variantě příkazu nechávám prázdné hranaté závorky [], takže nevypíšu konkrétní řádek, ale požadované hodnoty ze všech řádků.
Jak s pomocí jq exportovat JSON do CSV?
Na začátku článku jsem zmínil, že jq používám také pro rychlou konverzi JSON na čitelnější CSV. Je to poměrně snadné:
curl 'https://…..cz/wp-json/wp/v2/posts' | jq -r '["nadpis","url"], (.[] | [ .title.rendered, .link ]) | @csv'
Zaslouží si to malé vysvětlení. Přepínač -r zajistí, že se zobrazí čistý, raw, výstup bez formátování do uvozovek. V upřesnění výstupu pak necháme jako první pole nadpisy sloupečků pro CSV, v druhém uvádíme opět které řádky – všechny [] a sloupečky nás zajímají. A konečně za tím vším přidáme | @csv pro výstup do požadovaného formátu.
Jestliže je na první pohled vše v pořádku, pak stačí přidat jenom přesměrování výstupu do souboru v aktuální složce, odkud příkaz zavoláte:
curl 'https://…...cz/wp-json/wp/v2/posts' | jq -r '["nadpis","url"], (.[] | [ .title.rendered, .link ]) | @csv' > clanky.csv
S nástrojem jq toho jde vykouzlit spousta, určitě budu rád za zajímavé tipy. Začátečníkům, kteří nechtějí spoléhat na vševědoucí AI a chtějí se jq naučit používat nebo jej trochu pochopit, doporučuji k přečtení poměrně srozumitelný manuál a příkazy na webu programu.
💡 Tip: existují samozřejmě i alternativy. Mrkněte na jo nebo dasel podporující celou řadu formátů.
Tvůrce webů z Brna se specializací na Drupal, WordPress a Symfony. Acquia Certified Developer & Site Builder. Autor několika knih o Drupalu.
Web Development Director v Lesensky.cz. Ve volných chvílích podnikám výlety na souši i po vodě. Více se dozvíte na polzer.cz a mém LinkedIn profilu.
Přidat komentář