Wie zähle ich Elemente im JSON-Objekt über die Befehlszeile?

178

Ich erhalte diese Art von JSONAntwort von einem curlBefehl:

[
  {
    "cid": 49,
    "pyn": "yi4",
    "hans": "亿",
    "hant": "億",
    "tid": 68,
    "l10n": "cent million",
    "pid": 1,
    "pos": "num",
    "pos_txt": ""
  },
  {
    "cid": 50,
    "pyn": "yi4",
    "hans": "亿",
    "hant": "億",
    "tid": 69,
    "l10n": "100 millions",
    "pid": 1,
    "pos": "num",
    "pos_txt": ""
  }
]

Wie kann ich die Anzahl der Elemente im Array (hier 2) mithilfe Basheiner Befehlszeile (z. B. underscore) zählen?

Édouard Lopez
quelle
Ist die JavaScript-Lösung für Sie in Ordnung?
thefourtheye
Durch NPMModul ja. Ansonsten nein.
Édouard Lopez
Überprüfen Sie meine Lösung. Das braucht keine npm. Einfaches JavaScript.
thefourtheye
1
Ich bin in einem Bash-Kontext, nicht im Web
Édouard Lopez
Sie wissen, dass Sie JavaScript in der Shell ausführen können, oder?
thefourtheye

Antworten:

356

Wirf einfach eine andere Lösung in die Mischung ...

Probieren Sie jqeinen leichten und flexiblen JSON-Befehlszeilenprozessor aus:

jq length /tmp/test.json

Druckt die Länge des Array von Objekten.

Ken
quelle
4
Ihr anfänglicher jqCode ( .[]) gibt die Länge jedes einzelnen objectim Root-Array zurück, während ich nach der Länge des Root-Arrays selbst suche. Muss behoben werden.
Édouard Lopez
11
Wenn Ihre Wurzel kein Array ist, sondern ein Objekt mit einem Schlüssel, der ein Array enthält, dh {"Schlüssel": [elem1, elem2]}, können Sie usejq '.[] | length' file.json
bitk
8
Erstaunliches Werkzeug jqist. +1
Ory Band
Eine weitere nützliche Option für diesen @MnemonicFlow ist jq map_values(length) file.json. Das gibt Ihnen auch die Schlüssel.
Paulo Casaretto
3
Und wenn Ihre Eingabe aus unabhängigen Objekten anstelle eines einzelnen Arrays besteht, verwenden Sie die Option -soder --slurp, die sie beim Lesen in einem Array sammelt:jq -s length file.json
Hemflit
42

Der kürzeste Ausdruck ist

curl 'http://…' | jq length
Nikolay
quelle
3

Eine einfache Lösung besteht darin, die jshonBibliothek zu installieren :

jshon -l < /tmp/test.json
2
Édouard Lopez
quelle