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)?


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.


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.