Jak liczyć elementy w obiekcie JSON za pomocą wiersza poleceń?


179

Otrzymuję taką JSONodpowiedź z curlpolecenia:

[
  {
    "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": ""
  }
]

Jak mogę policzyć liczbę elementów w tablicy (tutaj 2), używając Bashlub wiersza poleceń (np. underscore)?


Czy rozwiązanie JavaScript jest dla Ciebie w porządku?
thefourtheye

Poprzez NPMmoduł tak. W przeciwnym razie nie.
Édouard Lopez

Sprawdź moje rozwiązanie. To nie wymaga npm. Zwykły JavaScript.
thefourtheye

1
Jestem w kontekście basha, a nie w sieci
Édouard Lopez

Wiesz, że możesz uruchomić JavaScript w powłoce, prawda?
thefourtheye

Odpowiedzi:


358

Po prostu wrzucam kolejny roztwór do miksu ...

Wypróbuj jqlekki i elastyczny procesor JSON z wiersza poleceń:

jq length /tmp/test.json

Wyświetla długość tablicy obiektów.


4
Twój jqkod początkowy ( .[]) zwraca długość każdego z nich objectw tablicy głównej, podczas gdy ja szukam długości samej tablicy głównej. Trzeba naprawić.
Édouard Lopez

11
Jeśli twój root nie jest tablicą, ale obiektem z kluczem, który zawiera tablicę, tj. {"Key": [elem1, elem2]}, możesz użyć usejq '.[] | length' file.json
bitek

8
To niesamowite narzędzie jq. +1
Ory Band

Inną przydatną opcją dla tego @MnemonicFlow jest jq map_values(length) file.json. To również da ci klucze.
Paulo Casaretto

3
A jeśli dane wejściowe składają się z niezależnych obiektów zamiast pojedynczej tablicy, -s--slurpjq -s length file.json
użyłbyś


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.