
A jq shell eszköz fantasztikus a JSON-adatok kezelésében. Ezeket az adatokat praktikus CSV-fájlokká is átalakíthatja, készen állva az összes táblázatkezelési igényre.
jq
egy kiváló kis eszköz, amely a terminálodban él, és hasznos dolgokat végez a JSON-adatokkal. Ez egy hatékony eszköz, de hasznos az apróságokhoz is. Például, ha JSON-adatokat továbbít hozzá, akkor szintaxis kiemeléssel nyomtatja ki? alapértelmezés szerint:
$ cat some-data.json|jq
A legtöbb rendszert telepítheti a jq-re. ( brew install jq
Mac gépen homebrew / chocolatey install jq
ablakokon csokoládéval). Ez a bejegyzés egy fejlettebb jq
technikát mutat be . Ha meg akarja szerezni az alapokat, akkor nézze meg az oktatóanyagot.
jq
bármilyen JSON-forrással működik. Mivel napjaim nagy részét a Sanity.io-alapú háttérprogramokkal dolgozom, ezt példaként használom. Azért is, mert szerintem rendkívül klassz, mit tehetünk ezzel a kombinációval.
A Sanity a strukturált tartalom háttérprogramja, valós idejű API-val és GROQ nevű lekérdezési nyelvvel érkezik. Kommunikálhat a Sanity-vel HTTP és JS / PHP klienseken keresztül, de a CLI eszközzel is $ sanity documents query 'GROQ-expression'
.

Tehát ha ilyen típusú dokumentumokat szeretne post
, akkor tegye $ sanity documents query '*[_type == "post"]'
. Vagy ha csak azokat szeretné, akiknek közzétételi dátuma 2018-ban van, akkor ez $ sanity documents query '*[_type == "post" && publishedAt > "2018-01-01
"]". Ez a lekérdezés teljes dokumentumokat ad. Ha csak a címeket és a közzétételi dátumokat szeretné, akkor írja be az e: *[_type == "post"]{title, published
At} címet .

A JSON-adatokból is kiválaszthatja a kulcsokat és értékeket jq
. Ma arra használjuk, hogy a JSON tömb strukturált tartalmát CSV fájlokká alakítsuk át. Mert a főnököd cuccokat akar Excel lapokba, nem? Ülj szorosan, és merüljünk be! ?
Tegyük fel, hogy táblázatba szeretné felvenni a blogbejegyzések címeinek, csempéinek és közzétételi dátumainak listáját. Az egész kifejezés így néz ki:
sanity documents query '*[_type == "post"]{title, "slug": slug.current, publishedAt}'|jq -r '(map(keys) | add | unique) as $cols | map(. as $row | $cols | map($row[.])) as $rows | $cols, $rows[] | @csv'
Ezt másolhatja, futtathatja, vagy játszhat vele a jqplay.com oldalon, de nézzük meg, mi folyik az jq
-expressionban:
-r
az,--raw-ouput
és biztosítja, hogy a kimenet sima, unalmas szöveg legyen, színek és speciális formázás nélkül.(map(keys) | add | unique) as $cols
map
az objektum kulcsain keresztül iterál ( ) és egyadd
sunique
változót hívunk$cols
. Más szavakkal, így készülnek az oszlopfejlécek.

map(. as $row | $cols | map($row[.])) as $rows
a külső tömb összes objektumát átveszi, és az összes objektumkulcson keresztül iterál (title, slug, publishedAt). Az értékeket egy tömbhöz fűzi, amely tömböket ad az értékekkel, amire vágyik, amikor a JSON-t CSV-vé alakítja.$cols, $rows[] | @csv
először az oszlopfejléceket helyezi el a tömbben, majd mindegyik tömböt, amelyet a csövekkel vonalakká alakítanak át@csv
, amelyek a kimenetet… csv formátumba formálják.

Ez a parancs kinyomtatja az eredményt a shellben. Ha közvetlenül egy fájlba akarja írni, > filename.
csv-t csatolhat hozzá, vagy például a vágólapra ( to | pbc
ha MacOS-on van, akkor cseppentsen hozzá). Vagy esetleg csinál valami izgalmasat a csv-vel pandákban ?? a Pythonban?
Ha hasznosnak találta ezt, szívesen hallanánk róla a megjegyzés rovatban!
Ha ki akarja próbálni a Sanity.io webhelyet, akkor keresse fel a sanity.io/freecodecamp webhelyet, és kap egy frissített ingyenes fejlesztői tervet. ✨
Eredetileg a sanity.io címen jelent meg.