Dowiedz się, jak efektywnie korzystać z FX, narzędzia wiersza poleceń manipulacji JSON

fx to popularne narzędzie wiersza poleceń do manipulacji JSON. Może być zainstalowany przez npm, brew lub pobrany jako samodzielny plik binarny.

npm i -g fx

fx przydaje się z poleceniem curl. Jeśli masz jakieś API, które zwraca JSON i chcesz zagłębić się w strukturę lub po prostu ją zobaczyć, potokuj JSON do fx.

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

fx ma naprawdę fajny tryb interaktywny do kopania w JSON.

Do poruszania się po JSON możesz używać myszy keys lub klawiszy strzałek. fx obsługuje fałdy, kliknij plik, aby go rozwinąć lub naciśnij strzałka w prawo, aby rozwinąć. Naciśnij klawisz e, aby rekurencyjnie rozwinąć wszystkie pola. Naciśnij Shift + e, aby zwinąć wszystko do tyłu.

Interaktywna koparka

W trybie interaktywnym naciśnij. klawisz (kropka). Na końcu okna terminala zobaczysz kursor z wyskakującym polem JSON. Za pomocą klawiszy strzałek wybierz pole i naciśnij klawisz Enter, kontynuuj, aż znajdziesz potrzebne dane. Jeśli chcesz cofnąć się o jeden poziom, naciśnij Ctrl + w, aby usunąć ostatni segment ścieżki. To polecenie dokładnie usuwa ostatnią część obok. lub [nawias. Jeśli chcesz zacząć od nowa, naciśnij Ctrl + u.

BTW, w tym polu możesz wpisać dowolne wyrażenie JavaScript, nie tylko wyrażenia ścieżki.

Niezły druk

Czasami nie potrzebujesz interaktywnej koparki i chcesz dość wydrukować JSON na standardowe wyjście. Można to zrobić dodając. argument polecenia fx.

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

Lub, aby wydrukować tylko część JSON, podaj żądaną ścieżkę.

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

Żądanie interfejsu API za każdym razem jest czasochłonne, co jeśli najpierw zapiszemy go na dysku?

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

Teraz możemy przekazać plik jako pierwszy argument do fx.

fx data.json .films

Każdy argument fx może być jakąś funkcją JavaScript, stwórzmy plik .fxrc tam umieścimy użyteczną funkcję i fragmenty do ponownego użycia.

Fragmenty

Dodajmy moc lodash do naszej linii poleceń. Zainstaluj lodash na całym świecie.

npm i -g lodash

Utwórz plik .fxrc w swoim katalogu domowym. I wstaw do niego następną linię.

Object.assign (globalny, wymagany ('lodash / fp'))

Teraz będziesz mógł wywoływać wszystkie metody lodash, nawet bez używania przedrostka _. Na przykład sprawdź, kto ostatnio zareagował:

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

Policzmy użycie różnych słów w komunikatach zatwierdzania.

curl „https://api.github.com/repos/facebook/react/commits” \
| fx 'map („commit.message”)' 'map (words)' spłaszczanie \
     'map (lowerCase)' groupBy (tożsamość) 'mapValues ​​(rozmiar)' \
      toPairs 'sortBy (1)' reverse 'take (30)' fromPairs

Dodawanie własnych urywków

To też jest dość łatwe. Na przykład mam jeden interfejs API, który wymaga kodowania dokumentów w formacie base64. Zobaczmy, jak to zrobić.

Utwórz jakąś funkcję i przypisz do globalnej. Na przykład fragment kodu base64.

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

Teraz mogę zrobić coś takiego:

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

Lub podzielone na osobne funkcje:

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

Edytuj w miejscu

Za pomocą fx możesz łatwo modyfikować obiekty JSON za pomocą ... operatora rozrzucania.

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

Ale jeśli spróbujesz zmodyfikować plik i zapisać na dysku w jednym poleceniu, plik zostanie uszkodzony.

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

Jest to wspólne dla wszystkich linii poleceń. Na przykład sed ma specjalną flagę do edycji w miejscu sed -i. Dodajmy tę funkcję również.

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

A teraz możemy po prostu wywołać save:

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

Możemy nawet wyprowadzić zmodyfikowane pole podczas zapisywania na dysku.

fx data.json '{... to, policz: this.count + 1}' zapisz .count

Korzystanie z xargs

fx wypisuje ciągi na standardowe wyjście jako „surowe” ciągi bez cudzysłowów, dzięki czemu filtry fx mogą komunikować się z systemami innymi niż JSON. Ale jeśli chcemy przekazać listę argumentów? Następny fragment jest przydatny.

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

Domyślnie niezdefiniowane wydruki na stderr, więc nie wpłynie to na nasze rury.

curl https://swapi.co/api/planets/1/ | fx. lista filmów | xargs curl

Wyszukiwanie JSON

fx obsługuje interaktywne wyszukiwanie JSON. Naciśnij /, aby wpisać wzór do wyszukania.

Aby przejść do następnego dopasowania wzoru, naciśnij n. Możesz zastosować filtr za pomocą. także. fx działa świetnie z oboma jednocześnie.

Ale co jeśli chcemy czegoś innego?

Myślę, że JavaScript jest najlepszym językiem do pracy z JSON (skrót od JavaScript Object Notation). Co w tym chcemy znaleźć wszystkie wystąpienia jakiegoś wzoru i wydrukować go na standardowe wyjście? Możemy stworzyć własny fragment wyszukiwania. Utwórzmy więc fragment wyszukiwania!

Teraz możemy rekurencyjnie przeszukiwać nasz JSON!

fx data.json „znajdź (/ fix / i)”

A jeszcze lepiej, korzystając z poprzedniej listy fragmentów, możesz wydrukować założone części.

fx data.json lista „znajdź (/ fix / i)” | xargs -L1 fx data.json

Streaming

fx obsługuje również streaming JSON. Możesz go użyć do parsowania dzienników itp.

dzienniki kubectl ... | fx. wiadomość

Wybierz (lub filtruj) tylko żądane wiadomości, przygotowując pomocnika wyboru.

dzienniki kubectl ... | fx 'select (x => x.level == "info"). wiadomość

Lub po prostu połącz kilka plików JSON z cat i pipe do fx.

cat * .json | fx .length

Support Obsługa motywów

fx obsługuje również motywy. Możesz zmieniać kolory i wcięcia.

global.FX_STYLE_SPACE = 4

Dwa niesamowite motywy dla FX są poniżej:

  • fx-theme-monokai - motyw monokai
  • fx-theme-night - motyw nocny

Mam nadzieję, że podoba Ci się korzystanie z FX!

Jeśli podoba ci się to, co robię, rozważ wsparcie ze strony Patreon.
I śledź mnie na GitHub.