Bagaimana cara menghitung item dalam objek JSON menggunakan baris perintah?

179

Saya mendapatkan JSONbalasan semacam ini dari sebuah curlperintah:

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

Bagaimana saya bisa menghitung jumlah item dalam array (di sini 2), menggunakan Bashatau baris perintah (misalnya underscore)?

Édouard Lopez
sumber
Apakah solusi JavaScript, oke untuk Anda?
theouroureye
Melalui NPMmodul ya. Kalau tidak, tidak.
Édouard Lopez
Periksa solusi saya. Tidak perlu npm. JavaScript polos.
theouroureye
1
Saya dalam konteks bash, bukan web
Édouard Lopez
Anda tahu bahwa Anda dapat menjalankan JavaScript di shell, kan?
theouroureye

Jawaban:

358

Hanya melempar solusi lain dalam campuran ...

Coba jq, prosesor JSON baris perintah yang ringan dan fleksibel:

jq length /tmp/test.json

Mencetak panjang array objek.

Ken
sumber
4
jqKode awal Anda ( .[]) mengembalikan panjang masing-masing objectdalam array root, sementara saya sedang mencari panjang array root itu sendiri. Perlu diperbaiki ke.
Édouard Lopez
11
Jika root Anda bukan array tetapi objek dengan kunci yang berisi array, yaitu {"key": [elem1, elem2]}, maka Anda dapat menggunakan usejq '.[] | length' file.json
bitek
8
Alat luar biasa, jqadalah. +1
Ory Band
Opsi lain yang bermanfaat untuk @MnemonicFlow adalah jq map_values(length) file.json. Itu akan memberi Anda kunci juga.
Paulo Casaretto
3
Dan jika input Anda terbuat dari objek independen dan bukan array tunggal, Anda akan menggunakan opsi -satau --slurp, yang mengumpulkan mereka ke dalam array saat membaca:jq -s length file.json
hemflit
42

Ekspresi terpendek adalah

curl 'http://…' | jq length
nikolay
sumber
3

Solusi sederhana adalah dengan menginstal jshonperpustakaan:

jshon -l < /tmp/test.json
2
Édouard Lopez
sumber