Hogyan lehet átalakítani a JSON-t CSV formátumba a parancssorban szereplő jq használatával

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.

jqegy 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 jqMac gépen homebrew / chocolatey install jqablakokon csokoládéval). Ez a bejegyzés egy fejlettebb jqtechnikát mutat be . Ha meg akarja szerezni az alapokat, akkor nézze meg az oktatóanyagot.

jqbá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, publishedAt} 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:

  • -raz, --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 $colsmapaz objektum kulcsain keresztül iterál ( ) és egy adds uniqueváltozót hívunk $cols. Más szavakkal, így készülnek az oszlopfejlécek.
  • map(. as $row | $cols | map($row[.])) as $rowsa 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[] | @csvelő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 | pbcha 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.