Як порахувати елементи в об'єкті JSON за допомогою командного рядка?


179

Я отримую таку JSONвідповідь від curlкоманди:

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

Як я можу підрахувати кількість елементів у масиві (тут 2), використовуючи Bashкомандний рядок (наприклад underscore)?


Чи добре для вас рішення JavaScript?
thefourtheye

Через NPMмодуль так. Інакше ні.
Едуард Лопес,

Перевірте моє рішення. Для цього не потрібні npm. Простий JavaScript.
thefourtheye

1
Я в контексті башти, а не в Інтернеті
Едуард Лопес,

Ви знаєте, що ви можете виконувати JavaScript в оболонці, правда?
thefourtheye

Відповіді:


358

Просто кидаємо інше рішення в суміш ...

Спробуйте jq, легкий і гнучкий процесор JSON командного рядка:

jq length /tmp/test.json

Друкує довжину масиву об’єктів.


4
Ваш початковий jqкод ( .[]) повертає довжину кожного objectв кореневому масиві, тоді як я шукаю довжину самого кореневого масиву. Потрібно виправитись.
Едуард Лопес

11
Якщо ваш корінь - це не масив, а об’єкт з ключем, який містить масив, тобто {"key": [elem1, elem2]}, ви можете використовувати usejq '.[] | length' file.json
bitek

8
Дивовижний інструмент, jqє. +1
Ory Band

Ще один корисний варіант для цього @MnemonicFlow - це jq map_values(length) file.json. Це дасть вам і ключі.
Пауло Касаретто

3
І якщо ваш вклад зроблений з незалежних об'єктів замість одного масиву, ви використовуєте параметр -sor --slurp, який збирає їх у масив під час читання:jq -s length file.json
hemflit


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.