Scopri come utilizzare fx in modo efficace, uno strumento da riga di comando per la manipolazione di JSON

fx è un popolare strumento da riga di comando per la manipolazione di JSON. Può essere installato tramite npm, erogato o scaricato come binario autonomo.

npm i -g fx

FX è utile con un comando di arricciatura. Se hai qualche API che restituisce JSON e vuoi scavare nella struttura o semplicemente vederla, reindirizza JSON in fx.

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

FX ha una modalità interattiva davvero ordinata per scavare in JSON.

È possibile utilizzare il mouse o i tasti freccia per navigare in JSON. FX supporta le pieghe, fare clic su un file per espanderlo o premere freccia destra per espandere. Premere il tasto e per espandere ricorsivamente tutti i campi. Premi Maiusc + e per ricomporre tutto.

Digger interattivo

In modalità interattiva, premere. tasto (punto). Vedrai un cursore alla fine della finestra del tuo terminale con un popup di campi JSON. Usa i tasti freccia per scegliere un campo e premi invio, continua fino a trovare i dati necessari. Se è necessario tornare indietro di un livello, premere Ctrl + w per cancellare l'ultimo segmento del percorso. Questo comando rimuove accuratamente l'ultima parte accanto a. o [parentesi. Se vuoi ricominciare, premi Ctrl + u.

A proposito, in questo campo puoi scrivere qualsiasi espressione JavaScript non solo espressioni di percorso.

Bella stampa

A volte non è necessario lo scavatore interattivo e si desidera stampare JSON su stdout. Questo può essere fatto aggiungendo. argomento al comando fx.

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

O per stampare solo una parte di JSON, specificare il percorso desiderato.

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

La richiesta dell'API ogni volta richiede tempo, e se prima lo salvassimo su un disco?

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

Ora possiamo passare il file come primo argomento a fx.

fx data.json .films

Ogni argomento di FX può essere una funzione JavaScript, creiamo un file .fxrc in cui inseriamo funzioni utili e frammenti da riutilizzare.

Frammenti

Aggiungiamo il potere di lodash alla nostra riga di comando. Installa lodash a livello globale.

npm i -g lodash

Crea il file .fxrc nella tua home directory. E mettici dentro la riga successiva.

Object.assign (globale, request ('lodash / fp'))

Ora sarai in grado di chiamare tutti i metodi lodash anche senza usare il prefisso _. Ad esempio, vedi chi si è impegnato a reagire di recente:

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

Contiamo l'uso di parole diverse nei messaggi di commit.

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

Aggiunta di frammenti personalizzati

Anche questo è abbastanza facile. Ad esempio, ho un'API che richiede che i documenti siano codificati in base64. Vediamo come si può fare.

Crea alcune funzioni e assegnale al globale. Ad esempio, uno snippet base64.

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

Ora sono in grado di fare qualcosa del genere:

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

O se diviso in funzioni separate:

fx data.json JSON.stringify base64 '{valore: questo}' | arricciatura -X POST

Modifica sul posto

Con FX puoi facilmente modificare oggetti JSON usando l'operatore ... spread.

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

Ma se si tenta di modificare un file e salvarlo su un disco con un solo comando, si corrompe il file.

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

Questo è comune a tutta la riga di comando. Ad esempio, sed ha un flag speciale per modificare sul posto sed -i. Aggiungiamo anche questa funzione.

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

E ora possiamo semplicemente chiamare save:

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

Possiamo persino emettere il campo modificato durante il salvataggio sul disco.

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

Usando xargs

fx stampa le stringhe in stdout come stringhe "raw" senza virgolette, quindi può essere utile per far dialogare i filtri FX con sistemi non basati su JSON. Ma se vogliamo passare un elenco di argomenti? Il prossimo frammento è utile.

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

Per impostazione predefinita, le stampe non definite in stderr non influiscono sulle nostre pipe.

ricciolo https://swapi.co/api/planets/1/ | fx .films list | ricciolo xargs

Alla ricerca di JSON

fx supporta la ricerca JSON interattiva. Premi / puoi digitare il motivo per cercare.

Per passare alla corrispondenza del modello successivo premere n. Puoi applicare il filtro con. anche. fx funziona alla grande con entrambi contemporaneamente.

E se volessimo qualcosa di diverso?

Penso che JavaScript sia il miglior linguaggio per lavorare con JSON (acronimo di JavaScript Object Notation). Cosa vogliamo trovare tutte le occorrenze di un certo motivo e stamparlo su stdout? Siamo in grado di creare il nostro frammento di ricerca. Quindi creiamo uno snippet di ricerca!

Ora possiamo cercare ricorsivamente il nostro JSON!

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

E ancora meglio con l'utilizzo del precedente elenco di frammenti è possibile stampare le parti fondate.

fx data.json 'trova (/ fix / i)' elenco | xargs -L1 fx data.json

Streaming

fx supporta anche lo streaming JSON. Puoi usarlo per l'analisi dei log, ecc.

registri kubectl ... | fx .message

Seleziona (o filtra) solo i messaggi desiderati anteponendo l'helper di selezione.

registri kubectl ... | fx 'select (x => x.level == "info")' .message

O semplicemente concatenare alcuni file JSON con cat e pipe in fx.

cat * .json | fx .length

Supporto temi

FX supporta anche i temi. Puoi cambiare i colori e il rientro.

global.FX_STYLE_SPACE = 4

Di seguito sono riportati due temi fantastici per FX:

  • fx-theme-monokai - tema monokai
  • fx-theme-night - tema notturno

Spero che ti piaccia usare fx!

Se ti piace quello che sto facendo, ti prego di supportarmi su Patreon.
E seguimi su GitHub.