de Knut Melvær

Cum se transformă JSON în CSV folosind jq în linia de comandă

Cum se transforma JSON in CSV folosind jq in linia

Instrumentul shell jq este minunat pentru a trata date JSON. De asemenea, poate transforma acele date în fișiere CSV la îndemână, pregătite pentru toate nevoile dvs. de foaie de calcul.

jq este un mic instrument excelent care trăiește în terminalul dvs. și face lucruri utile cu datele JSON. Este un instrument puternic, dar la îndemână și pentru lucrurile mici. De exemplu, dacă introduceți date JSON pe acesta, le imprimă cu evidențierea sintaxei? în mod implicit:

$ cat some-data.json|jq

Poti instalați jq pe majoritatea sistemelor. (brew install jq pe un Mac cu homebrew / chocolatey install jq pe ferestre cu ciocolată). Această postare prezintă un aspect mai avansat jq tehnică. Dacă doriți să obțineți elementele de bază, ar trebui consultați tutorialul.

jq funcționează cu orice sursă JSON. Din moment ce îmi petrec majoritatea zilelor lucrând cu Sanity.io– bazat pe backend-uri, îl voi folosi ca exemplu. De asemenea, pentru că cred că este extrem de mișto ce putem face cu această combinație.

Sanity este un backend pentru conținut structurat și vine cu un API în timp real și un limbaj de interogare numit GROQ. Puteți interacționa cu Sanity prin HTTP și Clienți JS / PHP, dar și cu instrumentul CLI cu $ sanity documents query 'GROQ-expression'.

1611676505 3 Cum se transforma JSON in CSV folosind jq in linia
Ieșirea din sanity.io a trecut prin jq

Deci, dacă doriți documentele dvs. de acest tip post, tu pui $ sanity documents query '*[_type == "post"]'. Sau dacă vrei doar pe cei cu o dată de publicare în 2018, este$ sanity documents query '*[_type == "post" && publishedAt > "2018-01-01“]’. Această interogare vă oferă documente întregi. Dacă doriți doar titlurile și publicați datele, ați scriee: *[_type == "post"]{title, publishedLa}.

1611676505 444 Cum se transforma JSON in CSV folosind jq in linia
Ieșirea din Sanity CLI a trecut prin jq

Puteți alege cheile și valorile din datele JSON din jq de asemenea. Astăzi îl vom folosi pentru a transforma conținutul structurat într-o matrice JSON într-un fișier CSV. Pentru că șeful tău vrea lucruri în foi Excel, nu? Stai bine și hai să ne scufundăm! ? ‍

Să presupunem că doriți o listă cu titlurile intrărilor de blog, slug-uri și date de publicare într-o foaie de calcul. Întreaga expresie ar arăta astfel:

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'

Puteți copia acest lucru și rula cu el sau joacă cu el pe jqplay.com, dar hai să vedem ce se întâmplă în jq-expresie:

  • -r este pentru --raw-ouput și se asigură că rezultatul este un text simplu și plictisitor, fără culori sau formatare specială.
  • (map(keys) | add | unique) as $cols itera (map) prin tastele din obiectul tău și adds unique cele la o variabilă numită $cols. Cu alte cuvinte, așa sunt făcute anteturile de coloană.
1611676506 712 Cum se transforma JSON in CSV folosind jq in linia
Hartați cheile unice pe care să le folosiți ca anteturi de coloană
  • map(. as $row | $cols | map($row[.])) as $rows preia toate obiectele din matricea exterioară și parcurge toate tastele obiectului (titlu, slug, publishedAt). Acesta adaugă valorile la o matrice, care vă oferă o matrice de matrice cu valorile, ceea ce doriți atunci când transformați JSON în CSV.
  • $cols, $rows[] | @csv plasează antetele de coloană mai întâi în matrice și apoi fiecare dintre matrici care sunt transformate în linii prin conducte @csv , care formatează ieșirea ca … csv.
1611676506 784 Cum se transforma JSON in CSV folosind jq in linia
Rezultatul final

Această comandă imprimă rezultatul în shell. Dacă doriți să o scrieți direct într-un fișier, puteți adăuga > filename.csv la acesta sau, de exemplu, la clipboard (pipă-l to | pbcopy dacă sunteți pe macOS). Sau poate veți face ceva interesant cu CSV în tigaiedas ?? în Python?

Dacă vi s-a părut util acest lucru, ne-ar plăcea să aflăm totul despre asta în secțiunea de comentarii!

Dacă doriți să încercați Sanity.io, puteți merge la sanity.io/freecodecamp și obțineți un plan de dezvoltator gratuit. ✨

Publicat inițial la sanatate.io.