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?


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.


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.