Ketahui cara menggunakan fx secara berkesan, alat baris arahan manipulasi JSON

fx adalah alat baris arahan manipulasi JSON yang popular. Ia boleh dipasang melalui npm, minuman atau dimuat turun sebagai binari mandiri.

npm i -g fx

fx berguna dengan arahan curl. Jika anda mempunyai beberapa API yang mengembalikan JSON dan anda ingin menggali ke dalam struktur atau melihatnya, paip JSON menjadi fx.

curl https://swapi.co/api/planets/ | fx

fx mempunyai mod interaktif yang sangat kemas untuk menggali ke JSON.

Anda boleh menggunakan tetikus atau anak panah anda untuk menavigasi JSON. fx menyokong lipatan, klik pada yang difailkan untuk memperluasnya atau tekan ⇓ tandatangan anak panah kanan untuk berkembang. Tekan kekunci untuk mengembangkan semua bidang secara rekursif. Tekan Shift + e untuk meruntuhkan semuanya kembali.

Penggali interaktif

Semasa dalam mod mod interaktif, tekan. (dot). Anda akan melihat kursor di bahagian akhir tetingkap terminal anda dengan pop timbul medan JSON. Gunakan kekunci anak panah untuk memilih medan dan tekan enter, teruskan sehingga anda mencari data yang diperlukan. Sekiranya anda perlu kembali satu tahap tekan Ctrl + w untuk memadam segmen laluan terakhir. Perintah ini dengan tepat mengalihkan bahagian terakhir bersebelahan. atau [kurungan. Sekiranya anda ingin memulakan, tekan Ctrl + u.

BTW, dalam bidang ini, anda boleh menulis ekspresi JavaScript tidak hanya ekspresi jalan.

Percetakan cantik

Kadang-kadang anda tidak perlu penggali interaktif dan mahu mencetak JSON cukup untuk stdout. Ini boleh dilakukan dengan menambah. hujah kepada perintah fx.

curl https://swapi.co/api/planets/1/ | fx.

Atau untuk mencetak hanya sebahagian daripada JSON menentukan laluan yang dikehendaki.

curl https://swapi.co/api/planets/1/ | fx .films

Meminta API setiap kali memakan masa, bagaimana jika kita menyimpannya ke cakera dahulu?

curl https://swapi.co/api/planets/1/> data.json

Sekarang kita boleh lulus fail sebagai hujah pertama kepada fx.

fx data.json .films

Setiap argumen ke fx boleh menjadi beberapa fungsi JavaScript, mari buat fail .fxrc di sana, kami letakkan fungsi dan coretan berguna untuk digunakan semula.

Coretan

Mari tambahkan kuasa lodash ke baris arahan kami. Pasang lodash secara global.

npm i -g lodash

Buat fail .fxrc ke dalam direktori rumah anda. Dan letakkan baris seterusnya ke dalamnya.

Object.assign (global, require ('lodash / fp'))

Sekarang anda akan dapat memanggil semua kaedah lodash walaupun tanpa menggunakan _ awalan. Sebagai contoh, lihat siapa yang telah bertindak balas baru-baru ini:

curl 'https://api.github.com/repos/facebook/react/commits' \
| fx 'groupBy ("commit.author.name")' 'mapValues ​​(size)' \
      toPairs 'sortBy (1)' reverse 'take (10)' fromPairs

Mari kita menghitung penggunaan perkataan yang berlainan dalam membuat mesej.

curl 'https://api.github.com/repos/facebook/react/commits' \
| fx 'map ("commit.message")' 'map (words)' flatten \
     'peta (lowerCase)' 'groupBy (identiti)' 'mapValues ​​(size)' \
      toPairs 'sortBy (1)' reverse 'take (30)' fromPairs

Menambah coretan anda sendiri

Ini juga mudah. Sebagai contoh, saya mempunyai satu API yang memerlukan dokumen menjadi base64 dikodkan. Mari lihat bagaimana ia boleh dilakukan.

Buat beberapa fungsi dan serahkan ke global. Sebagai contoh, coretan asas64.

global.base64 = str => Buffer.from (str) .toString ('base64')

Sekarang saya dapat melakukan sesuatu seperti ini:

fx data.json '{value: base64 (JSON.stringify (this))}' | curl -X POST

Atau jika berpecah untuk memisahkan fungsi:

fx data.json JSON.stringify base64 '{value: this}' | curl -X POST

Edit di tempat

Dengan fx anda boleh dengan mudah mengubah suai objek JSON dengan menggunakan ... operator pengendali.

echo '{"count": 0}' | fx '{... ini, hitung: this.count + 1}'

Tetapi jika anda cuba mengubah suai fail dan menyimpan cakera dalam satu arahan, anda merosakkan fail anda.

fx data.json '{... ini, hitung: this.count + 1}'> data.json

Ini adalah perkara biasa bagi semua baris arahan. Sebagai contoh, sed mempunyai bendera khas untuk mengedit sed -i di tempat. Mari tambahkan ciri ini juga.

global.save = json => (memerlukan ('fs'). writeFileSync (process.argv [2], JSON.stringify (json, null, 2)), json)

Dan sekarang kita boleh memanggil sahaja:

fx data.json '{... this, count: 1}' save

Kami juga boleh mengeluarkan medan diubahsuai semasa menyimpan pada cakera.

fx data.json '{... ini, hitung: this.count + 1}' save .count

Menggunakan xargs

strings fx cetakan ke stdout sebagai rentetan "mentah" tanpa sebutan jadi ini berguna untuk membuat penapis fx bercakap dengan sistem bukan berasaskan JSON. Tetapi jika kita ingin lulus senarai hujah? Potongan seterusnya datang berguna.

global.list = json => (json.forEach (x => console.log (x)), undefined)

Secara lalai, cetakan tidak jelas ke stderr jadi ini tidak akan menjejaskan paip kami.

curl https://swapi.co/api/planets/1/ | senarai fx .films | xargs curl

Mencari JSON

fx menyokong carian JSON interaktif. Tekan / boleh menaip corak anda untuk mencari.

Untuk melompat ke perlawanan corak seterusnya tekan n. Anda boleh memohon penapis dengan. juga. fx berfungsi hebat dengan kedua-dua mereka pada masa yang sama.

Tetapi bagaimana jika kita mahu sesuatu yang berbeza?

Saya fikir JavaScript adalah bahasa yang terbaik untuk bekerja dengan JSON (akronim kepada JavaScript Object Notation). Apa yang kita mahu mencari semua kejadian corak dan mencetaknya untuk stdout? Kita boleh membuat potongan carian kita sendiri. Jadi, mari buat coretan carian!

Sekarang kita boleh cari JSON kami secara rekursif!

fx data.json 'cari (/ fix / i)'

Dan lebih baik dengan menggunakan senarai coretan sebelumnya anda boleh mencetak bahagian yang diasaskan.

fx data.json 'cari (/ fix / i)' senarai | xargs -L1 fx data.json

Streaming

fx menyokong aliran JSON juga. Anda boleh menggunakannya untuk memfilter log, dll.

log kubek ... | fx .message

Pilih (atau tapis) hanya mesej yang diingini dengan menyediakan pembantu pilih.

log kubek ... | fx 'select (x => x.level == "info")' .message

Atau simpulkan beberapa fail JSON dengan kucing dan paip ke fx.

kucing * .json | fx .length

Sokongan tema

fx menyokong tema juga. Anda boleh menukar warna dan indent.

global.FX_STYLE_SPACE = 4

Dua tema yang mengagumkan untuk fx adalah di bawah:

  • fx-theme-monokai - tema monokai
  • tema fx-theme-night - malam

Saya harap anda menikmati menggunakan fx!

Jika anda suka apa yang saya lakukan, sila pertimbangkan saya menyokong Patreon.
Dan ikuti saya di GitHub.