Apreneu a utilitzar eficaçment fx, una eina de manipulació JSON de línia d’ordres

fx és una popular eina de línia d'ordres per a la manipulació JSON. Es pot instal·lar, elaborar o descarregar com a binari autònom mitjançant npm.

npm i -g fx

fx és molt útil amb una ordre curl. Si teniu una API que retorna JSON i voleu submergir-vos en l'estructura o simplement veure-la, introduïu JSON a fx.

Rínxols https://swapi.co/api/planets/ | fx

fx té un mode interactiu molt clar per començar a utilitzar JSON.

Podeu navegar per JSON amb el ratolí o les tecles de fletxa. fx admet plegar, feu clic a un quadre per expandir-lo o premeu la fletxa dreta per expandir-lo. Premeu la tecla e per expandir recursivament tots els camps. Premeu Maj + E per replegar-ho tot.

Excavadora interactiva

En mode interactiu, premeu. Botó (punt). Al final de la finestra del terminal, veureu un cursor amb una finestra emergent amb camps JSON. Utilitzeu les tecles de fletxa per seleccionar un camp i premeu Retorn. Seguiu endavant fins que trobeu les dades que necessiteu. Si heu de tornar enrere un nivell, premeu Ctrl + w per suprimir l'últim segment del camí. Aquesta ordre elimina exactament la darrera part al costat de. o [claudàtor. Per començar de nou, premeu Ctrl + u.

Per cert, podeu escriure qualsevol expressió JavaScript en aquest camp, no només expressions de camí.

Impressió bonica

De vegades no necessiteu l'explorador interactiu i voleu imprimir bé JSON per anar a la versió normal. Això es pot fer afegint. Argument per comandar fx.

Rínxols https://swapi.co/api/planets/1/ | fx.

O bé especifiqueu el camí que voleu imprimir només una part del JSON.

Rínxols https://swapi.co/api/planets/1/ | fx .films

Sol·licitar una API requereix molt de temps. Què passa si primer els guardem en un disc dur?

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

Ara podem passar el fitxer com a primer argument a fx.

fx data.json .films

Qualsevol argument a fx pot ser una funció JavaScript. Creem un fitxer .fxrc en el qual proporcionem funcions útils i fragments per reutilitzar-los.

Fragments

Afegim la potència de lodash a la línia d'ordres. Instal·leu Lodash a nivell mundial.

npm i-g lodash

Creeu un fitxer .fxrc al directori inicial. I poseu-hi la següent línia.

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

Ara podeu trucar a tots els mètodes lodash sense el prefix _. Per exemple, mireu qui s'ha compromès a respondre recentment:

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

Comptem l’ús de paraules diferents als missatges de confirmació.

curl 'https://api.github.com/repos/facebook/react/commits' \ | fx 'map ("commit.message")' 'map (paraules)' aplana el mapa '(lowerCase)' 'groupBy (identitat)' 'mapValors (mida)' \ toPairs 'ordenaBy (1)' reverse ' (30) "des de Parelles

Afegiu els vostres propis fragments

També és bastant fàcil. Per exemple, tinc una API que requereix la codificació de documents base64. Vegem com fer-ho.

Creeu un rol i assigneu-lo globalment. Per exemple, un fragment de base64.

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

Ara puc fer el següent:

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

O si es comparteix amb funcions separades:

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

Edita directament

Amb fx, podeu canviar fàcilment objectes JSON mitjançant l’operador de propagació.

eco '{"count": 0}' | fx '{... això, compte: aquest.count + 1}'

Tanmateix, si intenteu modificar un fitxer i desar-lo en un disc dur amb una sola ordre, danyareu el fitxer.

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

Això s'aplica a totes les línies d'ordres. Per exemple, Sed té una marca especial per editar sed -i al seu lloc. Afegim aquesta funció també.

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

I ara només podem trucar a save:

fx data.json '{... això, compte: 1}'

Fins i tot podem generar el camp canviat quan el desem al disc.

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

Utilitzeu xargs

fx imprimeix cadenes com a cadenes "crues" sense cometes a l'estandard, de manera que pot ser útil quan els filtres FX necessiten comunicar-se amb sistemes no basats en JSON. Però, i si volem passar una llista d’arguments? El següent fragment és útil.

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

La impressió estàndard no està definida en stderr, de manera que les nostres canonades no es veuen afectades.

Rínxols https://swapi.co/api/planets/1/ | fx .films list | El rínxol de Xarg

Cerqueu JSON

fx admet la cerca JSON interactiva. Premeu / per introduir el patró que voleu cercar.

Per passar a la següent concordança de patrons, premeu n. Podeu aplicar filtres amb. també. fx funciona molt bé amb tots dos alhora.

Però, i si volem alguna cosa diferent?

Crec que JavaScript és el millor llenguatge per treballar amb JSON (un acrònim de JavaScript Object Notation). On volem trobar totes les ocurrències d'un patró i imprimir-lo a l'ordinador normal? Podem crear el nostre propi fragment de cerca. Per tant, creem un fragment de cerca.

Ara podem cercar recursivament el nostre JSON.

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

I encara millor, la llista de fragments anteriors us permet imprimir les parts que es troben.

fx data.json 'find (/ fix / i)' llista | xargs -L1 fx data.json

Transmissió en temps real

fx també admet la transmissió JSON. El podeu utilitzar per analitzar registres, etc.

registres de kubectl ... | fx .messatge

Seleccioneu (o filtreu) només els missatges que vulgueu mitjançant la prefixació de la utilitat amb select.

registres de kubectl ... | fx 'select (x => x.level == "info")' .messatge

O simplement concatenar uns quants fitxers JSON amb cat i pipe a fx.

cat * .json | fx. llargada

Temes de suport

fx també admet temes. Podeu canviar colors i sagnats.

global.FX_STYLE_SPACE = 4

A continuació, es mostren dos grans temes per a l’efecte:

  • fx-theme-monokai: tema Monokai
  • fx-theme-night - tema nocturn

Espero que gaudiu de fx!

Si us agrada el que faig, podeu donar-me suport a Patreon. I segueix-me a GitHub.