Otkrijte kako učinkovito koristiti fx, alat naredbenog retka za manipulaciju JSON

fx je popularan alat za naredbene linije za manipulaciju JSON. Može se instalirati putem npm, piva ili preuzeti kao samostalni binarni uređaj.

npm i -g fx

fx dolazi u redu s naredbom curl. Ako imate neki API koji vraća JSON i želite se ukopati u strukturu ili je samo vidjeti, ubacite JSON u fx.

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

fx ima stvarno uredan interaktivni način za kopanje u JSON-u.

Za kretanje JSON-om možete koristiti miša ili tipke sa strelicama. fx podržava nabore, kliknite na datoteku kako biste je proširili ili pritisnite strelicu desno za proširenje. Pritisnite e tipku da rekursivno proširite sva polja. Pritisnite Shift + e da biste sve vratili natrag.

Interaktivni kopač

Dok ste u interaktivnom načinu rada, pritisnite. (točka) ključ. Pokazat ćete kursor na kraju prozora vašeg terminala s skočnim poljem JSON polja. Pomoću tipki sa strelicama odaberite polje i pritisnite enter i nastavite dok ne pronađete potrebne podatke. Ako se želite vratiti na jednu razinu, pritisnite Ctrl + w da biste izbrisali posljednji segment puta. Ova naredba točno uklanja zadnji dio pokraj. ili [nosač. Ako želite početi ispočetka, pritisnite Ctrl + u.

BTW, u ovo polje možete napisati bilo koji JavaScript izraz, ne samo izraze staza.

Lijep tisak

Ponekad vam ne treba interaktivni kopač i želite lijepo ispisati JSON za isticanje. To se može učiniti dodavanjem. argument za naredbu fx.

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

Ili za ispis samo dijela JSON-a odredite željeni put.

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

Zatraživanje API-ja svaki put zahtijeva mnogo vremena, a što ako ga prvo spremimo na disk?

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

Sada možemo proslijediti datoteku kao prvi argument fx.

fx data.json .films

Svaki argument za fx može biti neka JavaScript funkcija, stvorimo .fxrc datoteku, tamo stavimo korisnu funkciju i isječke za ponovnu upotrebu.

komadići

Dodajmo svoju snagu komada u našu naredbenu liniju. Globalno instaliraj lodash.

npm ja -g lodash

Stvorite .fxrc datoteku u svoj kućni direktorij. I stavite sljedeći redak u nju.

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

Sada ćete moći nazvati sve metode lodash-a čak i bez upotrebe prefiksa _. Na primjer, pogledajte tko se ponaša nedavno:

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

Računajmo na upotrebu različitih riječi u porukama.

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

Dodavanje vlastitih isječaka

I to je prilično jednostavno. Na primjer, imam jedan API koji zahtijeva da dokumenti moraju biti kodirani base64. Pogledajmo kako se to može učiniti.

Kreirajte neku funkciju i dodijelite globalno. Na primjer, isječak base64.

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

Sada sam u mogućnosti učiniti nešto takvo:

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

Ili ako se podijelite na odvojene funkcije:

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

Uredi na mjestu

Pomoću fx-a možete jednostavno mijenjati JSON objekte koristeći ... operator operatora.

echo '{"count": 0}' | fx '{... ovo, računaj: ovaj.count + 1}'

Ali ako pokušate izmijeniti datoteku i spremiti na disk u jednoj naredbi, vi je oštećujete.

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

Ovo je zajedničko za sve naredbene retke. Na primjer, sed ima posebnu zastavu za uređivanje sed -i. Dodajmo i ovu značajku.

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

I sada možemo jednostavno nazvati spasiti:

fx data.json '{... ovo, broji: 1}' spremite

Čak možemo izbaciti modificirano polje spremajući se na disk.

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

Korištenje xargs-a

fx ispisuje žice u stdout kao "sirove" žice bez navodnika, tako da to može biti korisno za fx filtere koji razgovaraju sa sustavima koji se ne temelje na JSON-u. Ali ako želimo prenijeti popis argumenata? Sljedeći isječak dobro dolazi.

global.list = json => (json.forEach (x => console.log (x)), neodređeno)

Prema zadanom, nedefinirano otisak u stderr tako da neće utjecati na naše cijevi.

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

Pretražujući JSON

fx podržava interaktivno JSON pretraživanje. Pritisnite / možete utipkati svoj uzorak za pretraživanje.

Za prijelaz na sljedeće podudaranje uzorka pritisnite n. Pomoću filtera možete primijeniti. također. fx odlično funkcionira s obojicom istovremeno.

Ali što ako želimo nešto drugačije?

Mislim da je JavaScript najbolji jezik za rad s JSON-om (kratica za JavaScript Object Notation). Što u svemu želimo pronaći pojave nekog uzorka i ispisati ga na stdout? Možemo stvoriti vlastiti isječak pretraživanja. Zato stvorimo isječak pretraživanja!

Sada možemo rekurzivno pretraživati ​​naš JSON!

fx data.json 'pronađi (/ popravi / i)'

A još bolje ako pomoću prethodnog popisa isječaka možete ispisati osnovane dijelove.

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

tekući

fx podržava i JSON streaming. Možete ga koristiti za analizu dnevnika itd.

kubectl trupci ... | fx .message

Odaberite (ili filtrirajte) samo željene poruke pretvarajući se u odabir pomagača.

kubectl trupci ... | fx 'select (x => x.level == "info")'. poruka

Ili jednostavno spojite nekoliko JSON datoteka s mačkom i cijevi u fx.

mačka * .json | fx .duljina

Podrška za teme

fx podržava i teme. Možete promijeniti boju i uvlačenje.

global.FX_STYLE_SPACE = 4

Dvije fantastične teme za fx su u nastavku:

  • fx-tema-monokai - tema monokai
  • fx-theme-night - noćna tema

Nadam se da ćete uživati ​​u korištenju fx-a!

Ako vam se sviđa što radim, molim vas razmislite o tome da me podržite na Patreonu.
I slijedi me na GitHubu.