Як порахувати елементи в об'єкті 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.