389 Stimmen

Die Ausgabe von cURL im Unix-Shell-Skript im lesbaren JSON-Format anzeigen

In meinem Unix-Shell-Skript, wenn ich einen Curl-Befehl ausführe, wird das Ergebnis wie unten angezeigt, das ich in eine Datei umleite:

{"type":"Show","id":"123","title":"name","description":"Funny","channelTitle":"ifood.tv","lastUpdateTimestamp":"2014-04-20T20:34:59","numOfVideos":"15"}

Aber ich möchte dieses Ausgabe im lesbaren JSON-Format wie unten in der Datei platzieren:

{"type":"Show",
"id":"123",
"title":"name",
"description":"Funny",
"channelTitle":"ifood.tv",
"lastUpdateTimestamp":"2014-04-20T20:34:59",
"numOfVideos":"15"}

Wie kann ich die Ausgabe auf diese Weise formatieren?

788voto

Gilles Quenot Punkte 153339

Einige Lösungen zur Auswahl:

json json ist ein schnelles CLI-Tool zur Arbeit mit JSON. Es ist ein einzelnes node.js-Skript ohne externe Abhängigkeiten (außer node.js selbst).

$ echo '{"type":"Bar","id":"1","title":"Foo"}' | json
{
  "type": "Bar",
  "id": "1",
  "title": "Foo"
}

Erforderlich:

# npm install -g json

json_pp: Befehlsdienstprogramm für die Decodierung/Encodierung von JSON in Linux-Systemen verfügbar

echo '{"type":"Bar","id":"1","title":"Foo"}' | json_pp -json_opt pretty,canonical
{
   "id" : "1",
   "title" : "Foo",
   "type" : "Bar"
}

Sie möchten mögleicherweise das Argument -json_opt pretty,canonical beibehalten, um eine vorhersehbare Reihenfolge zu gewährleisten.


jq: Leichtgewichtiger und flexibler JSON-Verarbeitungsbefehlszeilenprozessor. Er ist in plattformunabhängigem C geschrieben und hat keine Laufzeitabhängigkeiten.

echo '{"type":"Bar","id":"1","title":"Foo"}' | jq '.'
{
  "type": "Bar",
  "id": "1",
  "title": "Foo"
}

Das einfachste jq-Programm ist der Ausdruck ., der die Eingabe nimmt und sie unverändert als Ausgabe produziert.

Weitere jq-Optionen finden Sie im Handbuch


python yq yq: Befehlszeilen YAML/XML/TOML-Prozessor - jq Wrapper für YAML-, XML- und TOML-Dokumente

$ echo '{"type":"Bar","id":"1","title":"Foo"}' | yq
{
  "type": "Bar",
  "id": "1",
  "title": "Foo"
}

Die go-Version go yq funktioniert hier nicht


Mit xidel Befehlszeilentool zum Herunterladen und Extrahieren von Daten aus HTML/XML-Seiten oder JSON-APIs, unter Verwendung von CSS, XPath 3.0, XQuery 3.0, JSONiq oder Musterabgleich. Es kann auch neue oder transformierte XML/HTML/JSON-Dokumente erstellen.

$ echo '{"type":"Bar","id":"1","title":"Foo"}' | xidel -e '$json'
{
  "type": "Bar",
  "id": "1",
  "title": "Foo"
}

mit python:

echo '{"type":"Bar","id":"1","title":"Foo"}' | python -m json.tool
{
    "id": "1",
    "title": "Foo",
    "type": "Bar"
}

mit nodejs und bash:

echo '{"type":"Bar","id":"1","title":"Foo"}' | node -p "JSON.stringify( JSON.parse(require('fs').readFileSync(0) ), 0, 1 )"
{
 "type": "Bar",
 "id": "1",
 "title": "Foo"
}

100voto

0xbb Punkte 1136

Ich vermute, dass du die JSON-Ausgabe schöner gestalten möchtest. Das könnte mit Python erreicht werden:

curl http://localhost:8880/test.json | python -mjson.tool > out.json

63voto

Zhenhua Punkte 2019

Dies soll zu Gilles' Antwort hinzugefügt werden. Es gibt viele Möglichkeiten, dies zu erreichen, aber persönlich bevorzuge ich etwas Leichtgewichtiges, Einfach zu merken und universell verfügbar (z. B. bei Standard LTS-Installationen Ihrer bevorzugten Linux-Variante oder einfach zu installieren) auf gängigen *nix-Systemen.

Hier sind die Optionen in ihrer bevorzugten Reihenfolge:

Python Json.tool Modul

echo '{"foo": "lorem", "bar": "ipsum"}' | python -mjson.tool

Pro: fast überall verfügbar; Contra: keine Farbcodierung


jq (kann eine einmalige Installation erfordern)

echo '{"foo": "lorem", "bar": "ipsum"}' | jq

Contra: benötigt Installation von jq; Pro: Farbcodierung und vielseitig einsetzbar


json_pp (verfügbar in Ubuntu 16.04 LTS)

echo '{"foo": "lorem", "bar": "ipsum"}' | json_pp

Für Ruby-Benutzer

gem install jsonpretty
echo '{"foo": "lorem", "bar": "ipsum"}' | jsonpretty

46voto

NanoNova Punkte 718

Sie können das node-Modul json verwenden:

npm i -g json

fügen Sie dann einfach | json nach curl hinzu. curl http://localhost:8880/test.json | json

42voto

Arefe Punkte 8879

Sie können jq installieren und die Abfrage wie unten angegeben ausführen:

curl http://localhost:8080/observations/station/221 | jq

Bildbeschreibung eingeben

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X