Transformieren Sie JSON und machen Sie es mit jq lesbar
JavaScript Object Notation (JSON) ist eines der weltweit beliebtesten Datenformate. Es hat breite Unterstützung und eine einfache Spezifikation. Es ist einfach, in vielen Programmiersprachen zu arbeiten, insbesondere in solchen, die auf die Webentwicklung abzielen.
Die manuelle Überprüfung von JSON-Daten bleibt jedoch umständlich. Obwohl es sich um ein für Menschen lesbares Textformat handelt, kann ein JSON-Dataset große Datenmengen enthalten. Quellen formatieren JSON nicht immer in einer einfach zu lesenden Form.
javaDas Tool jq ermöglicht Benutzern das Formatieren, Filtern und Transformieren von JSON-Daten.
Was ist jq?
Da es sich um ein Befehlszeilentool handelt , verwenden Sie jq im Allgemeinen, indem Sie Befehle in ein Terminal eingeben. Es gibt auch einen ausgezeichneten Online-Spielplatz, auf den wir weiter unten näher eingehen.
Der normale Betrieb dreht sich um Filter und die Anwendung eines Filters auf einen Eingabe-JSON. Sie können jq verwenden, um ein einzelnes Element aus einer Reihe von vielen abzurufen. Sie können auch bestimmte Felder aus jedem Element in einem Satz entfernen, um die Daten zu vereinfachen. Sie können sogar komplexe Vorgänge ausführen, um die Eingabe in eine andere Form zu übersetzen.
Herunterladen und Installieren von jq
Das jq-Programm hat keine externen Abhängigkeiten, was bedeutet, dass der Einstieg sehr einfach ist. Laden Sie zunächst eine ausführbare Binärdatei für Linux, macOS oder Windows über die Schaltfläche auf der jq-Startseite herunter . Sobald Sie das Programm heruntergeladen haben, können Sie es direkt über die Befehlszeile ausführen. Möglicherweise möchten Sie es der Einfachheit halber umbenennen ( mv jq-osx-amd64 jq ), und Sie müssen es möglicherweise ausführbar machen ( chmod + x jq ).
Bestätigen Sie, dass Sie jq ausführen können, indem Sie es über die Befehlszeile ohne Argumente ausführen:
$ ./jq
Sie sollten einige allgemeine Verwendungsinformationen sehen, beginnend mit einer einfachen einzeiligen Zusammenfassung wie der folgenden:
jq - commandline JSON processor [version 1.6]
Wenn Sie mit dem oben genannten Ansatz zu kämpfen haben, gibt es Alternativen. Die jq-Software unterstützt gängige Paketmanager, und Sie können in der Zwischenzeit jederzeit mit der Online-Sandbox experimentieren.
Grundlegende jq-Verwendung
Die Standardverwendung ist:
jq [options] <jq filter> [file...]
Also zum Beispiel:
$ jq '.' data.json
Sie können Eingaben auch über einen anderen Befehl wie folgt einleiten:
$ echo '{"name":"john"}' | jq '.'
{
"name": "john"
}
Dies ist am nützlichsten, wenn der erste Befehl beispielsweise so etwas wie ein Aufruf zum Einrollen ist, mit dem JSON-Daten von einem Webdienst abgerufen werden können.
Der in diesen Beispielen gezeigte Filter ist der einfachste . (ein Punkt) , der die Eingabe in einer hübschen Form druckt. Dies ist bereits sehr nützlich, aber die Filter von jq bieten viel mehr Leistung als diese.
Anwenden von Basisfiltern auf JSON mithilfe von jq
Ein jq-Filter ähnelt einem CSS-Selektor oder einem XPATH-Ausdruck. Es ist ein langer Ausdruck, der aus kleineren Teilen besteht. Ein vollständiger Filter mag kompliziert aussehen, aber sobald Sie die Grundlagen gelernt haben, sollte jeder Teil verständlich sein.
Arbeiten mit Objekten
Sie können den Wert einer Objekteigenschaft mithilfe der .property- Syntax abrufen :
$ echo '{"name":"john"}' | jq '.name'
"john"
Dies kann verkettet werden, um auf tief verschachtelte Strukturen zuzugreifen:
$ echo '{"name":{"first":"john","last":"smith"}}' | jq '.name.last'
"smith"
Arbeiten mit Arrays
Die einfachste Array-Operation gibt ein Element über seinen Index zurück:
$ echo '[1,2,3]' | jq '.[2]'
3
Beachten Sie, dass jq wie bei den meisten Programmiersprachen Arrays ab Position 0 indiziert. Sie können ein Subarray auch mit dieser Syntax in Scheiben schneiden:
$ echo '[1,2,3]' | jq '.[1:3]'
[
2,
3
]
Ohne einen Index in eckigen Klammern wandelt jq einen einzelnen Array-Wert als mehrere Werte in seinen eigenen Inhalt um:
$ echo '[1,2,3]' | jq '.[]'
1
2
3
Dies ist eine wichtige Methode zum Verketten von Filtern, die wir später zeigen werden.
Erweiterte Funktionen
Sie können die Leistung von jq nur dann vollständig verstehen, wenn Sie das jq-Handbuch lesen . Dank der Unterstützung von jq für Operatoren, Variablen und sogar benutzerdefinierte Funktionen kann sich jq wie jede Programmiersprache verhalten.
Diese Funktionen ermöglichen eine erweiterte Verwendung, wenn auch kompliziert. Jq verfügt jedoch über einige integrierte Funktionen wie Funktionen und Operatoren, von denen auch einfache Aufgaben profitieren. Hier ist ein Beispiel:
$ echo '[2,4,8]' | jq 'add / length'
4.666666666666667
Dieser Filter speist den Eingang in der sowohl das Hinzufügen und Längenfunktionen, die Ergebnisse dividiert wird . Im Betrieb berechnet es den Durchschnitt eines Arrays von Zahlen.
Der Divisionsoperator kann auch Zeichenfolgen bearbeiten, um sie basierend auf einem Trennzeichen zu teilen:
$ echo '"Just testing"' | jq '. / " "'
[
"Just",
"testing"
]
Die Auswahlfunktion filtert ein Array und behält nur die Elemente bei, die eine bestimmte Einschränkung erfüllen:
$ echo '[2,4,8]' | jq '.[] | select(. >= 3)'
4
8
Beachten Sie, dass dies auch ein Beispiel für den Pipe-Operator ( | ) von jq ist, der einer Pipe einer Shell ähnelt. Es speist das Ergebnis seines linken Filters als Eingabe in seinen rechten Filter ein.
Die Kartenfunktion ist sehr nützlich, wenn Sie mit Arrays arbeiten. Es führt eine Operation für jedes Element des Arrays aus und nicht für das gesamte Array selbst:
$ echo '[1,2,3]' | jq 'map(.+1)'
[
2,
3,
4
]
Sie werden es oft in Verbindung mit select verwenden, z
$ echo '[2,4,8]' | jq 'map(select(. >= 3))'
[
4,
8
]
Alles zusammenfügen: ein praktisches jq-Beispiel
Da jq alle gültigen JSON-Pipes verarbeitet, können Sie die Ausgabe über den Befehl curl senden. Auf diese Weise können Sie JSON von einer URL abrufen und sofort in der Befehlszeile verarbeiten:
JSON Feed ist eine JSON-Alternative zu den Formaten RSS und Atom. Die NPR-Site ist ein Beispiel, das JSON-Feed unterstützt, aber es ist schwierig, sie aus dem Quellcode anzuzeigen, und sie enthält viele Daten:
![Transformieren Sie JSON und machen Sie es mit jq lesbar - npr feed raw 1](https://static1.makeuseofimages.com/wp-content/uploads/2021/01/npr-feed-raw-1.png)
Sie können sofort sehen, wie viel einfacher das Lesen ist, indem Sie diese Daten abrufen und durch jq leiten:
$ curl -s https://feeds.npr.org/1019/feed.json | jq '.'
![Transformieren Sie JSON und machen Sie es mit jq lesbar - npr feed pretty 1](https://static1.makeuseofimages.com/wp-content/uploads/2021/01/npr-feed-pretty-1.png)
Hier ist ein vollständigeres Beispiel für einen Filter, der die ID, den Titel und das Datum jeder Geschichte abruft, die die Site an einem Dienstag veröffentlicht hat.
$ curl -s https://feeds.npr.org/1019/feed.json |
jq '.items | .[] |
select(
.date_published |
.[0:19] + "Z" |
fromdate |
strftime("%a") == "Tue"
) |
{id: .id, title:.title, date:.date_published}'
Nach Auswahl der Eigenschaft items verwendet dieser Filter . [] , Um über jedes Element zu iterieren. Der Hauptteil des Filters verwendet die Auswahlfunktion , um nur die Posts mit einem date_published- Wert zu behalten, deren Wochentag ( strftime ("% a") ) Di ist . Die strftime- Funktion erfordert ein sehr spezifisch formatiertes Datum, das der Filter erstellt . [0:19] + "Z" .
Nach Auswahl der gewünschten Elemente erstellt der endgültige Filter für jedes Objekt ein Objekt mit den erforderlichen Feldern. Beachten Sie, dass sich die Ergebnisse jedes Mal ändern, wenn sich der Feed ändert. Hier ist ein Beispiel zum Zeitpunkt der Veröffentlichung:
{
"id": "959667930",
"title": "Deplatforming: Not A First Amendment Issue, But Still A Tough Call For Big Tech",
"date": "2021-01-26T17:00:00-05:00"
}
{
"id": "960679189",
"title": "My Pillow CEO Mike Lindell Permanently Suspended From Twitter",
"date": "2021-01-26T10:17:15-05:00"
}
{
"id": "960220477",
"title": "Is Your 401(k) Colluding To Make Cereal More Expensive?",
"date": "2021-01-26T06:31:24-05:00"
}
So verarbeiten Sie JSON Online mit jqplay
Wenn Sie jq vor dem Herunterladen ausprobieren möchten, ist jqplay der perfekte Startpunkt. Über eine einfache Oberfläche können Sie auf der Site Beispiel-JSON und einen Filter eingeben und dann das Ergebnis anzeigen.
Außerdem können Sie verschiedene Optionen ausprobieren. Dazu gehören –compact-output (um Leerzeichen zu entfernen) und –null-input (um das Ergebnis bei fehlender Eingabe anzuzeigen ).
Die Schnittstelle enthält auch einen sehr nützlichen Cheatsheet-Abschnitt. Hier ist ein Screenshot des vorherigen langen Beispiels :
![Transformieren Sie JSON und machen Sie es mit jq lesbar - jqplay screenshot](https://static1.makeuseofimages.com/wp-content/uploads/2021/01/jqplay-screenshot.png)
Beachten Sie, dass Sie wie bei diesem Link auch Beispiele über eine URL freigeben können.
Verwenden Sie jq, um JSON-Daten zu lesen und zu bearbeiten
Ausführliche Informationen zu jq finden Sie im Tutorial und im Handbuch, die beide auf der jq-Website verfügbar sind. Das Programm selbst bietet eine begrenzte Menge an Hilfe über die Option –help .
Wenn Sie grundlegende Filter und Transformationen ausführen oder einen großen Teil von JSON lesen möchten, ist jq ein wertvolles Werkzeug.