383 Stimmen

Wie zählt man Elemente in JSON-Objekt mithilfe der Befehlszeile?

Ich erhalte diese Art von JSON-Antwort von einem curl-Befehl:

[
  {
    "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) zählen, mithilfe von Bash oder einer Befehlszeile (z.B. underscore)?

647voto

Ken Punkte 7077

Nur eine weitere Lösung in die Mischung werfen...

Probieren Sie jq, ein leichtgewichtiges und flexibles JSON-Verarbeitungstool für die Befehlszeile:

jq length /tmp/test.json

Gibt die Länge des Arrays von Objekten aus.

92voto

yuvilio Punkte 3325

Sie können auch jq verwenden, um das Array innerhalb des zurückgegebenen JSON zu verfolgen und dann das in einen zweiten jq-Aufruf zu leiten, um seine Länge zu erhalten. Angenommen, es befand sich in einer Eigenschaft namens records, wie {"records":[...]}.

$ curl https://my-source-of-json.com/list | jq -r '.records | length'
2
$

90voto

nikolay Punkte 2336

Der kürzeste Ausdruck ist

curl 'http://…' | jq length

19voto

Dhruv Saraswat Punkte 688

Wenn das JSON aus einer Datei gelesen wird, versuche es damit -

number_of_objects=`jq '. | length' json_file_name.json`
echo $number_of_objects

Wenn das JSON-Array innerhalb eines Schlüssels im JSON wie unten gezeigt ist -

{
  "fruits": [
    "Äpfel",
    "Orangen",
    "Birnen"
  ]
}

versuche es damit -

number_of_objects=`jq '.fruits | length' json_file_name.json`
echo $number_of_objects

(Du musst jq herunterladen, damit diese Lösung funktioniert)

9voto

Kellen Stuart Punkte 6257

Gehen Sie davon aus, dass diese Struktur vorhanden ist:

(gespeichert in einer Variablen mit dem Namen json)

{
    "results": [
        { "id": 1 }
        { "id": 2 }
    ]

}

Wenn Sie zählen möchten, wie viele sich im Array results befinden, lautet der Befehl:

$json | jq '.results | length'

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