Bir komanda xətti JSON manipulyasiya vasitəsi olan fx-dən necə səmərəli istifadə edəcəyinizi öyrənin

fx, JSON manipulyasiyası üçün populyar bir komut satırı vasitədir. Quraşdırıla bilər, dəmlənir və ya npm vasitəsilə bağımsız ikili olaraq yüklənə bilər.

npm i -g fx

fx bir qıvrım əmri ilə çox əlverişlidir. JSON-u qaytaran bir API varsa və quruluşa dalmaq və ya sadəcə görmək istəsəniz, JSON-u fx-ə daxil edin.

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

fx, JSON ilə işə başlamaq üçün çox aydın bir interaktiv rejimə malikdir.

Siçan və ya ox düymələri ilə JSON-da gedə bilərsiniz. fx qatlanmanı dəstəkləyir, genişləndirmək üçün bir qutunu vurun və ya genişləndirmək üçün sağ oxa basın. Bütün sahələri rekursiv şəkildə genişləndirmək üçün e düyməsini basın. Hər şeyi geri qaytarmaq üçün Shift + E düymələrini basın.

İnteraktiv ekskavator

İnteraktiv rejimdə düyməsini basın. (Dövr) düyməsini basın. Terminal pəncərənizin sonunda JSON sahələri olan açılan pəncərəli bir imleci görəcəksiniz. Bir sahə seçin və Enter düyməsini basın. Lazımi məlumatları tapana qədər davam edin. Bir səviyyəyə qayıtmaq lazımdırsa, yolun son hissəsini silmək üçün Ctrl + w düymələrini basın. Bu əmr tam olaraq yanındakı son hissəni silər. və ya [mötərizə. Yenidən başlamaq üçün Ctrl + u düymələrinə basın.

Yeri gəlmişkən, bu sahədə yalnız yol ifadələrini deyil, istənilən JavaScript ifadəsini yaza bilərsiniz.

Olduqca çap

Bəzən interaktiv qazıcıya ehtiyacınız yoxdur və stdout-a getmək üçün JSON-u gözəl bir şəkildə çap etmək istəyirsiniz. Bu əlavə etməklə edilə bilər. Fx əmri vermək üçün mübahisə.

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

Və ya JSON-un yalnız bir hissəsini yazdırmaq istədiyiniz yolu göstərin.

Buruqlar https://swapi.co/api/planets/1/ | fx .filmlər

API tələb etmək hər dəfə çox vaxt aparır. Əvvəlcə onları sabit diskdə saxlasaq nə olar?

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

İndi faylı ilk arqument kimi ötürə bilərik.

fx data.json .filmlər

Fx ilə əlaqəli hər hansı bir mübahisə JavaScript funksiyası ola bilər. Yenidən istifadə üçün faydalı funksiyalar və fraqmentlər təqdim etdiyimiz .fxrc faylı yarataq.

Parçalar

Komanda xəttinə lodash gücünü əlavə edək. Lodash'ı qlobal olaraq quraşdırın.

npm i-g lodash

Ev qovluğunuzda .fxrc faylı yaradın. Və içərisinə növbəti sətri qoyun.

Object.assign (qlobal, tələb ('lodash / fp'))

Artıq bütün lodash metodlarına _ prefiksi olmadan zəng edə bilərsiniz. Məsələn, bu yaxınlarda kimin cavab verməyi öhdəsinə götürdüyünə baxın:

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

Gəlin mesajlarda fərqli sözlərin istifadəsini sayaq.

curl 'https://api.github.com/repos/facebook/react/commits' \ | fx 'map ("commit.message")' 'map (words)' flatten \ 'map (lowerCase)' 'groupBy (şəxsiyyət)' 'mapValues ​​(ölçüsü)' \ toPairs 'sortBy (1)' reverse 'take (30) 'fromPairs

Öz fraqmentlərinizi əlavə edin

Bu da olduqca asandır. Məsələn, sənədlərin base64 kodlanmasını tələb edən bir API var. Gəlin görək necə edim.

Bir rol yaradın və qlobal olaraq təyin edin. Məsələn, bir base64 parçası.

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

İndi aşağıdakıları edə bilərəm:

fx data.json '{dəyər: base64 (JSON.stringify (bu))}' | Oluklu -X POST

Və ya ayrı funksiyalar üçün paylaşıldığı təqdirdə:

fx data.json JSON.stringify base64 '{dəyər: bu}' | Oluklu -X POST

Birbaşa redaktə edin

Fx ilə yayılma operatorunu istifadə edərək JSON obyektlərini asanlıqla dəyişə bilərsiniz.

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

Ancaq bir faylı dəyişdirib bir əmrlə sabit diskdə saxlamağa çalışarsanız, dosyanıza zərər verəcəksiniz.

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

Bu, bütün əmr satırlarına aiddir. Məsələn, Sed-in yerində sed -i-ni düzəltmək üçün xüsusi bir bayrağı var. Bu xüsusiyyəti də əlavə edək.

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

İndi isə sadəcə qənaət edə bilərik:

fx data.json '{... bu, say: 1}'

Dəyişdirilən sahəni diskə yazarkən belə çıxara bilərik.

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

Xargs istifadə edin

fx, sətirləri stdout-da tırnak olmadan "xam" sətirlər kimi yazdırır, belə ki, FX filtrlərinin JSON əsaslı olmayan sistemlərlə əlaqə qurması lazım olduqda bu faydalı ola bilər. Bəs arqumentlərin siyahısını vermək istəsək nə etməli? Növbəti hissə lazımlıdır.

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

Standart çap stderr-də təyin olunmur, buna görə borularımız təsir etmir.

Buruqlar https://swapi.co/api/planets/1/ | fx .filmlər siyahısı | Xarg qıvrım

JSON tapın

fx interaktiv JSON axtarışını dəstəkləyir. Axtarmaq istədiyiniz nümunəni daxil etmək üçün / düyməsini basın.

Növbəti model uyğunluğuna keçmək üçün n düyməsini basın. İlə filtrlər tətbiq edə bilərsiniz. həmçinin. fx hər ikisi ilə eyni zamanda əla işləyir.

Bəs fərqli bir şey istəsək nə etməli?

Hesab edirəm ki, JavaScript JSON ilə işləmək üçün ən yaxşı dildir (JavaScript Nesne Qeydinin kısaltması). Nümunənin bütün hadisələrini harada tapmaq və stdout-da çap etmək istəyirik? Öz axtarış parçamızı yarada bilərik. Beləliklə, axtarış parçası yarataq.

İndi JSON-u rekursiv şəkildə axtara bilərik!

fx data.json 'tap (/ düzelt / i)'

Və daha da yaxşısı, əvvəlki snippet siyahısı, tapılan hissələri çap etməyə imkan verir.

fx data.json 'tapmaq (/ düzelt / i)' siyahısı | xargs -L1 fx data.json

Axın

fx ayrıca JSON axınını dəstəkləyir. Günlükləri təhlil etmək üçün istifadə edə bilərsiniz və s.

kubectl qeydləri ... | fx .message

Yardımı əvvəlcədən seçin ilə yalnız istədiyiniz mesajları seçin (və ya süzün).

kubectl qeydləri ... | fx 'select (x => x.level == "info")'. mesaj

Və ya yalnız bir neçə JSON sənədini pişik və boru ilə fx-yə birləşdirin.

pişik * .json | fx. uzunluq

Temaları dəstəkləyin

fx də mövzuları dəstəkləyir. Rəngləri və girintiləri dəyişə bilərsiniz.

qlobal.FX_STYLE_SPACE = 4

Dövriyyə üçün iki əla mövzu aşağıdadır:

  • fx-theme-monokai - Monokai teması
  • fx-theme-night - gecə mövzusu

Ümid edirəm fx-dən zövq alacaqsınız!

Etdiyim işi bəyənirsinizsə, Patreon-da mənə dəstək ola bilərsiniz. Və GitHub-da məni izləyin.