Odkrijte, kako učinkovito uporabljati fx, orodje ukazne vrstice za manipulacijo JSON

fx je priljubljeno orodje JSON manipulacijske ukazne vrstice. Lahko ga namestite prek npm, pivo ali prenesete kot samostojno binarno datoteko.

npm i -g fx

fx je uporaben z ukazom curl. Če imate nekaj API-ja, ki vrne JSON in želite vkopati v strukturo ali jo samo videti, položite JSON v fx.

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

fx ima res prijeten interaktivni način za kopanje v JSON.

Za krmarjenje po JSON-u lahko uporabite miško ali puščice. fx podpira pregibe, kliknite datoteko, da jo razširite, ali pa pritisnite arrow puščico desno, da jo razširite. Pritisnite tipko e, da vsa polja rekurzivno razširite. Pritisnite Shift + e, da strnete vse nazaj.

Interaktivni kopač

Medtem ko ste v interaktivnem načinu, pritisnite. (pika) ključ. Kazalec boste videli na koncu okna vašega terminala s pojavnim poljem polj JSON. S puščičnimi tipkami izberite polje in pritisnite enter in nadaljujte, dokler ne najdete potrebnih podatkov. Če se želite vrniti eno stopnjo nazaj, pritisnite Ctrl + w, da izbrišete zadnji segment poti. Ta ukaz natančno odstrani zadnji del zraven. ali [oklepaj. Če želite začeti znova, pritisnite Ctrl + u.

BTW, v to polje lahko napišete poljuben izraz JavaScript, ne samo izraze poti.

Lep tisk

Včasih ne potrebujete interaktivnega kopača in želite zelo natisniti JSON za stdout. To je mogoče storiti z dodajanjem. argument za ukaz fx.

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

Ali za tiskanje samo dela JSON določite želeno pot.

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

Zahteva API-ja vsakič zamudno, kaj če ga najprej shranimo na disk?

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

Zdaj lahko datoteko prenesemo kot prvi argument v fx.

fx data.json .films

Vsak argument fx je lahko neka funkcija JavaScript, ustvarimo .fxrc datoteko, kamor postavimo uporabno funkcijo in odrezke za ponovno uporabo.

Odrezki

V našo ukazno vrstico dodajmo moč lodash-a. Namestite lodash po vsem svetu.

npm i -g lodash

Ustvarite .fxrc datoteko v domači imenik. In vanjo vstavite naslednjo vrstico.

Object.assign (globalno, zahtevajte ('lodash / fp'))

Zdaj boste lahko poklicali vse metode lodash, tudi brez uporabe predpone _. Na primer, poglejte, kdo se zavezuje, da bo nedavno reagiral:

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

Upoštevajmo uporabo različnih besed v sporočilih.

curl 'https://api.github.com/repos/facebook/react/commiss' \
| fx 'map ("commit.message") "" map (besede)' flatten \
     'map (lowerCase)' 'groupBy (identiteta)' 'mapValues ​​(size)' \
      toPairs 'sortBy (1)' reverse 'sprejme (30)' odPairs

Dodajanje lastnih odrezkov

Tudi to je precej enostavno. Na primer, imam en API, za katerega so potrebni dokumenti, da so kodirani base64. Poglejmo, kako je to mogoče storiti.

Ustvarite nekaj funkcije in dodelite globalno. Na primer, odrezek base64.

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

Zdaj lahko naredim nekaj takega:

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

Ali če je razdeljen na ločene funkcije:

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

Uredi na mestu

S fx lahko JSON predmete enostavno spremenite z uporabo ... operatorja.

echo '{"štetje": 0}' | fx '{... to, šteje: this.count + 1}'

Če pa poskušate datoteko spremeniti in shraniti na disk z enim ukazom, jo ​​poškodovate.

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

To je skupno za vse ukazne vrstice. Na primer, sed ima posebno oznako za urejanje na mestu sed -i. Dodajmo še to funkcijo.

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

In zdaj lahko preprosto pokličemo save:

fx data.json '{... to, šteje: 1}' shrani

Spremenjeno polje lahko celo izstavimo, medtem ko shranimo na disk.

fx data.json '{... to, šteje: this.count + 1}' shrani .count

Uporaba xargov

fx natisne strune v stdout kot "surove" strune brez narekovajev, zato je to lahko koristno za to, da se filtri fx pogovarjajo s sistemi, ki ne temeljijo na JSON. Toda če želimo prenesti seznam argumentov? Naslednji delček je še kako primeren.

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

Privzeto je nedefinirano tiskanje v stderr, tako da to ne bo vplivalo na naše cevi.

curl https://swapi.co/api/planets/1/ | seznam xfilmov | xargs curl

Iskanje JSON

fx podpira interaktivno iskanje JSON. Pritisnite / vnesite svoj vzorec za iskanje.

Če želite preiti na naslednji vzorec, pritisnite n. Filter lahko uporabite z. tudi. fx odlično deluje z obema hkrati.

Kaj pa, če želimo nekaj drugega?

Menim, da je JavaScript najboljši jezik za delo z JSON (kratica JavaScript Object Notation). Kaj želimo najti vse pojave nekega vzorca in ga natisniti v stdout? Ustvarimo lahko lasten iskalni delček. Torej ustvarimo iskalni delček!

Zdaj lahko rekurzivno iščemo naš JSON!

fx data.json 'najdi (/ popravi / i)'

Še bolje pa je, da s prejšnjim seznamom delcev natisnete osnovane dele.

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

Pretakanje

fx podpira tudi JSON streaming. Lahko ga uporabite za razčlenitev dnevnikov itd.

kubectl dnevniki ... | fx .message

Izberite (ali filtrirajte) samo želena sporočila, tako da vnaprej izberete pomočnika.

kubectl dnevniki ... | fx 'select (x => x.level == "info") ".mesa

Ali pa le združite nekaj datotek JSON s cat in pipe v fx.

mačka * .json | fx .dolžina

Teme podpirajo

fx podpira tudi teme. Lahko spremenite barve in vdolbine.

global.FX_STYLE_SPACE = 4

Spodaj sta dve super temi za fx:

  • fx-tema-monokai - tema monokai
  • fx-tema-noč - nočna tema

Upam, da boste uživali v uporabi fx-a!

Če vam je všeč to, kar počnem, prosim, podprite me pri Patreonu.
In sledite mi na GitHubu.