
Das Shell-Tool jq eignet sich hervorragend für den Umgang mit JSON-Daten. Es kann diese Daten auch in handliche CSV-Dateien umwandeln, die für alle Ihre Anforderungen an das Tabellenkalkulieren bereit sind.
jq
ist ein ausgezeichnetes kleines Tool, das in Ihrem Terminal lebt und nützliche Dinge mit JSON-Daten macht. Es ist ein starkes Werkzeug, aber auch praktisch für die kleinen Dinge. Wenn Sie beispielsweise JSON-Daten an diese weiterleiten, werden diese mit Syntaxhervorhebung gedruckt. standardmäßig:
$ cat some-data.json|jq
Sie können jq auf den meisten Systemen installieren. ( brew install jq
auf einem Mac mit Homebrew / chocolatey install jq
auf Fenstern mit Schokolade). Dieser Beitrag präsentiert eine fortgeschrittenere jq
Technik. Wenn Sie die Grundlagen erlernen möchten, sollten Sie das Tutorial lesen.
jq
funktioniert mit jeder JSON-Quelle. Da ich die meiste Zeit meiner Arbeit mit Sanity.io-basierten Backends verbringe, werde ich dies als Beispiel verwenden. Auch weil ich finde, dass es unglaublich cool ist, was wir mit dieser Kombination machen können.
Sanity ist ein Backend für strukturierte Inhalte und wird mit einer Echtzeit-API und einer Abfragesprache namens GROQ geliefert. Sie können mit Sanity über HTTP- und JS / PHP-Clients, aber auch mit dem CLI-Tool mit interagieren $ sanity documents query 'GROQ-expression'
.

Wenn Sie also Ihre Dokumente vom Typ wollen post
, setzen Sie $ sanity documents query '*[_type == "post"]'
. Oder wenn Sie nur diejenigen mit einem Veröffentlichungsdatum im Jahr 2018 möchten, ist dies $ sanity documents query '*[_type == "post" && publishedAt > "2018-01-01
"]". Diese Abfrage gibt Ihnen ganze Dokumente. Wenn Sie nur die Titel und Veröffentlichungsdaten möchten, schreiben Sie e: *[_type == "post"]{title, published
At}.

Sie können auch Schlüssel und Werte aus JSON-Daten auswählen jq
. Heute werden wir damit strukturierten Inhalt in einem JSON-Array in eine CSV-Datei umwandeln. Weil Ihr Chef Sachen in Excel-Tabellen haben will, oder? Setz dich fest und lass uns eintauchen! ?
Angenommen, Sie möchten eine Liste der Titel, Slugs und Veröffentlichungsdaten Ihrer Blogeinträge in einer Tabelle. Der ganze Ausdruck würde so aussehen:
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'
Sie können dies kopieren und damit ausführen oder auf jqplay.com damit spielen, aber lassen Sie uns sehen, was im Ausdruck vor sich geht jq
:
-r
ist für--raw-ouput
und stellt sicher, dass die Ausgabe einfacher alter langweiliger Text ohne Farben oder spezielle Formatierung ist.(map(keys) | add | unique) as $cols
iteriert (map
) durch die Schlüssel in Ihrem Objekt undadd
sunique
zu einer Variablen namens$cols
. Mit anderen Worten, so werden Ihre Spaltenüberschriften erstellt.

map(. as $row | $cols | map($row[.])) as $rows
Nimmt alle Objekte im äußeren Array und durchläuft alle Objektschlüssel (Titel, Slug, PubliziertAt). Die Werte werden an ein Array angehängt, wodurch Sie ein Array von Arrays mit den Werten erhalten. Dies ist das, was Sie möchten, wenn Sie JSON in CSV umwandeln.$cols, $rows[] | @csv
Setzt die Spaltenüberschriften zuerst in das Array und dann in jedes der Arrays, die durch Weiterleiten in Zeilen umgewandelt werden@csv
, wodurch die Ausgabe als… csv formatiert wird.

Dieser Befehl druckt das Ergebnis in der Shell aus. Wenn Sie es direkt in eine Datei schreiben möchten, können Sie > filename.
csv daran anhängen oder beispielsweise an die Zwischenablage (Pipe it to | pbc
opy, wenn Sie unter macOS arbeiten). Oder vielleicht machst du etwas Aufregendes mit dem CSV in Pandas? in Python?
Wenn Sie dies nützlich fanden, würden wir gerne im Kommentarbereich alles darüber hören!
Wenn Sie Sanity.io ausprobieren möchten, können Sie unter sanity.io/freecodecamp einen erweiterten kostenlosen Entwicklerplan erhalten. ✨
Ursprünglich veröffentlicht bei sanity.io.