Menu
O mnie Kontakt

W dzisiejszym odcinku Kuba Mrugalski przedstawia widzom, jak skutecznie pracować z plikami JSON przy użyciu narzędzia JQ w terminalu. Na samym początku, Kuba zwraca uwagę na konieczność posiadania odpowiedniego pliku JSON oraz instalacji JQ, zaznaczając, że proces instalacji nieco się różni w zależności od systemu operacyjnego. Następnie, krok po kroku, pokazuje różne metody wywołania JQ, w tym sposób użycia podstawowego selektora oraz kombinacji z innymi komendami, które pozwalają na łatwe uzyskiwanie danych z JSON-a.

Kuba następnie demonstruje, jak korzystać z różnych selektorów, aby wydobyć konkretne informacje, takie jak nazwa sklepu czy adres. Podkreśla znaczenie umiejętnego poruszania się po zagnieżdżonej strukturze JSON-a oraz jasno objaśnia, jak można dotrzeć do interesujących nas danych. W trakcie prezentacji Kuba nie omija zachęcenia do experimentowania z różnymi metodami, aby w pełni zrozumieć potencjał JQ.

Kolejna część filmu poświęcona jest bardziej zaawansowanym operacjom, takim jak sortowanie danych oraz wydobywanie specyficznych informacji z wielowarstwowych tablic. Kuba learns that kontrolowanie składni oraz dobór odpowiednich nawiasów jest kluczowy w pracy z JQ. Zademonstruje także, jak generować pliki CSV lub HTML z danych JSON, co jest przydatnym aspektem dla użytkowników pracujących z dużymi zbiorami danych.

W dalszej części filmu Kuba opowiada o funkcjach do filtracji, takich jak 'select' do ekstrakcji danych spełniających określone kryteria. Wzmianka o filtrowaniu książek według ceny pokazuje, jak wszechstronne mogą być zastosowania JQ, a także podkreśla, że użytkownicy mogą znaleźć ogromne możliwości w dostosowywaniu filtrów do ich potrzeb. Dzięki wyraźnym przykładom, widzowie mają szansę zrozumieć, w jaki sposób JQ umożliwia interakcję z danymi.

Na koniec, Kuba zachęca widzów do sięgnięcia po jego e-booka, który zawiera 77 zadań związanych z administracją serwerami, co może pomóc w rozwijaniu umiejętności w tej dziedzinie. Zauważając, że w chwili pisania tego artykułu film ma 9120 wyświetleń oraz 429 lajków, Kuba kończy przemyśleniami na temat wartości nauki za pomocą zadań i współpracy w odpowiednich grupach.

Toggle timeline summary

  • 00:00 Wprowadzenie do pracy z plikami JSON za pomocą JQ w terminalu.
  • 00:08 Tworzenie pliku JSON o nazwie 'ksiazkI JSON' w celach demonstracyjnych.
  • 00:13 Wyjaśnienie początkowych problemów z formatem, takich jak kodowanie i zagnieżdżenie.
  • 00:20 Przegląd struktury danych, w tym nazwy sklepu, adresu fizycznego i kategorii.
  • 00:34 Instalacja JQ jest niezbędna, z różnymi metodami dla różnych systemów.
  • 00:39 Pierwsza metoda ładowania pliku za pomocą JQ, zauważając usunięcie problemów z kodowaniem.
  • 00:51 Druga metoda polega na używaniu selektora wewnątrz poleceń JQ.
  • 01:04 Podkreślenie typowych błędów popełnianych przez początkujących podczas korzystania z JQ.
  • 01:40 Użycie podstawowego selektora do wydrukowania wszystkich danych JSON.
  • 02:00 Ekstrakcja konkretnych pól, takich jak 'nazwa' i 'adres' z JSON.
  • 02:25 Zrozumienie głębszej struktury danych, aby uzyskać dostęp do tytułów książek.
  • 02:50 Pokazanie, jak uzyskać dostęp do zagnieżdżonych tablic w strukturze JSON.
  • 04:09 Próba posortowania tytułów książek alfabetycznie.
  • 04:47 Ekstrakcja listy kategorii ze struktury JSON.
  • 05:50 Filtrowanie książek w określonych kategoriach na podstawie ceny.
  • 06:59 Ekstrakcja i wyświetlanie konkretnych książek rozwojowych.
  • 09:11 Tworzenie nowego JSON bez zbędnych pól.
  • 09:25 Obliczanie całkowitej ceny wszystkich książek w określonej kategorii.
  • 10:05 Liczenie liczby dostępnych konkretnych książek.
  • 11:49 Eksploracja struktur JSON za pomocą konkretnych kluczy.
  • 12:18 Pokazanie, jak używać zakresów do uzyskiwania dostępu do wielu wpisów.
  • 13:19 Podsumowanie dotyczące pracy z JQ i zachęcenie do dalszej nauki.

Transcription

Cześć, nazywam się Kuba Mrugalski i pokażę Ci w tym filmie jak pracować z plikami JSON z użyciem narzędzia JQ, nie marnując czasu, chodzi o terminala. Na początek potrzebujemy jakiś plik, na którym będziemy pracować. Ja stworzyłem plik o nazwie książki JSON. Ten plik ma taki dość dziwny format, to znaczy widać tutaj, niektóre rzeczy się rozwalają z kodowaniem, mamy tu jakieś zagnieżdżenia. Widzimy, że jest tu nazwa sklepu, adres sklepu fizyczny, adres internetowy, jakieś kategorie, dużo danych i chcielibyśmy je jakoś ogarnąć. Na początek oczywiście wypadałoby to JQ zainstalować. Nie będę wychodził przez to jak to zainstalować, na każdym systemie robi się to inaczej. Ale jeżeli już masz to w systemie zainstalowane, to możesz wywołać JQ na co najmniej trzy sposoby. Metoda pierwsza, JQ, znak wczytania pliku i następnie nazwa pliku, który chcesz wczytać. I gotowe. Zwróćmy teraz uwagę, że wszelkiego rodzaju rozwalone kodowanie już nas nie dotyczy. Wszystko zostało zencodowane tak jak trzeba. Mało tego, mamy tu pokolorowaną całą składnię i o wiele, wiele ładniej wygląda to. Dobra, teraz druga metoda to jest użycie tak zwanego selektora, to znaczy damy tutaj selektor kropka. Co ta kropka znaczy? Za chwilę powiem. I dajemy Enter. Wielu początkujących wywódkowników JQ używa składni takiej, to znaczy JQ, nazwa pliku i liczy na to, że faktycznie coś wyprintuje. No wyprintuje oczywiście, ale tylko error. I dlaczego tak się dzieje? Brak selektora, no to po prostu to jest wyrzucenie errora na ekran. Można jeszcze użyć metody z katem. Metoda z katem nie jest zbyt lubiana przez początkujących adminów. Oni zawsze się czepiają, że jest to tak zwane niepotrzebne użycie kata. No dobra, dajemy tutaj JQ, ale przynajmniej nie musimy selektora używać i dajemy Enter. Działa to dokładnie tak samo. No to żeby trochę podenerwować początkujących adminów, zrobimy sobie wersję z katem i będziemy wyciągać kolejne dane. Na początek podstawowy selektor to jest kropka. Kropka to jest po prostu początek drzewa Jsona i to znaczy od początku wyprintuj mi wszystko jak leci. Enter. Jak się domyślasz daje to po prostu całego Jsona ładnie sformatowanego, ale chcielibyśmy wyciągnąć jakieś jedno konkretne pole. Niech to będzie pole nazwa, a potem wyciągniemy jeszcze adres. No to w takim razie zamiast kropki dajemy po prostu kropka i nazwa pola, czyli na przykład nazwa i Enter. No i mamy taniutki ebook wyciągnięty. Gdybyśmy chcieli wyciągnąć dwa pola dajemy przecinek i następnie kropka adres. I teraz dajemy Enter i mamy i nazwę naszego sklepu i adres tego sklepu. Chcielibyśmy teraz wyciągnąć załóżmy wszystkie tytuły książek jakie tylko są w środku. Przyjrzyjmy się jeszcze raz jak wygląda struktura danych. Tu mamy tytuł, tytuł, czyli w zasadzie chcemy wyciągnąć pole tytuł. Wielu początkujących użytkowników JQ wpisałoby tak, no ale to nie jest do końca poprawne. Zwraca nam nula, bo nie ma takiego pola na początku drzewa naszego Jsona jak tytuł. Ono, to pole jest bardzo głęboko zaszyte wewnątrz struktury. Ta struktura dokładnie wygląda. Popatrzmy na to. Główne pole w naszym Jsonie nazywa się kategorie. W środku mamy jakąś tablicę, gdzie są przewodniki, mamy rozwojowe książki, mamy poradniki. No okej, czyli to jest tablica. A co się znajduje wewnątrz tej tablicy? Znajduje się kolejna tablica. Teraz jak tutaj można sobie z tym poradzić? Popatrz na to. Jeżeli wiemy, że to jest wewnątrz takiej gałęzi o nazwie kategorie to podajemy nazwę gałęzi po prostu. Okej, Enter. I widzimy teraz mamy tutaj tylko gałęź kategorię, czyli odcięliśmy tam nazwę, adres URL, adres fizyczny. No dobra. I to są teraz nasze poszczególne wpisy. Chcielibyśmy jednak każdy z tych wpisów potraktować indywidualnie. Jest to tablica, dlatego też dajemy na końcu kwadratowe nawiasy. To znaczy będę traktował kategorię jak tablicę, a nie jak jeden obiekt. Daję Enter. I teraz widzimy, że to się podzieliło nam na takie poszczególne wpisy. Mamy ile tych tablic? No tutaj jest pierwsza tablica, druga tablica i trzecia tablica. Dlaczego tak? Dlatego, że mamy trzy kategorie. No dobra. Chcielibyśmy więc kategorie, które są tablicą potraktować też jako tablica. Nie wiem, czy tutaj załapałeś przeskok, ale chodzi o to, że mamy podwójne zagłębienie tablic i dopiero teraz występuje tutaj pole tytułu. No dobra. Czy to działa? Jak najbardziej działa. No świetnie. Chcielibyśmy teraz te tytuły, załóżmy posortować sobie alfabetycznie. No to dajemy sobie Pypa, po prostu Sort. I okazuje się, że to nie działa. Dlaczego nie działa? Mamy tutaj informację, że coś takiego jak słowo przewodnik nie może być sortowane. Dlaczego? Dlatego, że wrzuciliśmy stringa do wnętrza czegoś, co sortuje tablicę. Co więc trzeba zrobić? Trzeba zamienić nasz wynik na tablicę. Jak to zrobić najprościej? Znowu kwadratowe nawiasy. Zasada jest bardzo prosta. Jeżeli w JQ coś nie działa, to albo dlatego, że masz kwadratowe nawiasy, albo dlatego, że o nich zapomniałeś. Czyli na wszelki wypadek dodaj je. I Enter. I okazuje się, że tak jak najbardziej zostało to posortowane. Od 1, 2, 3, aż do przewodnika po datrach. No spoko. Co jeszcze byśmy mogli tutaj zrobić? Chcielibyśmy na przykład wyciągnąć listę naszych kategorii. Jak to zrobić? Bo jeżeli napiszemy coś takiego kropka kategorie, no to nam wyciągnie faktycznie zawartość naszych kategorii. Ale my byśmy chcieli wyciągnąć to, to coś. Co byśmy tu mogli zrobić? Moglibyśmy na przykład dać sobie tutaj Pipe'a i następnie GIS, czyli klucze. I dajemy Enter i widzimy tutaj, że mamy poradniki, przewodniki rozwojowe. No super. Udało nam się wyciągnąć klucze. A gdyby tak te klucze zapisać załóżmy w formacie CSV? Czemu by nie? Pipe, Małpa, CSV. I gotowe. A może w HTML-u byśmy to sobie zrobili? Nie ma problemu, jest filtr do HTML-a. HTML, proszę bardzo, zapisane. Może nie za ładnie, ale też da się to wypintować. Dobrze, co byśmy mogli jeszcze wyciągnąć? Załóżmy, przeglądnijmy sobie, jak wygląda nasza struktura danych. Wygląda ona w ten sposób. I chcielibyśmy na przykład wyciągnąć załóżmy książki, które są w kategorii rozwojowe i których cena jest załóżmy większa niż 60 zł. Jak to zrobić? No to w takim razie dajemy tutaj kategorię. Znowu literówka. I teraz byśmy chcieli się dobrać do rozwojowe. Jak się domyślasz, kropka rozwojowa. I mamy wszystko gotowe. I teraz chcielibyśmy zrobić co? Chcielibyśmy przesortować to. Tylko za pomocą takiej funkcji jak select. Działa to plus, minus na tej zasadzie jak na przykład w języku SQL. W sumie da się dorzucić tak. Pipe, select, a następnie nazwa pola, czyli kropka cena. I następnie co się ma z tym czymś dziać? Większa od 60. Prawdopodobnie tutaj nam się wysypie ze względu na to, że to nie jest tablica. Enter. Jak najbardziej. To nie jest tablica. No to co robimy? Lecimy po tablicę. Enter. I teraz widzimy, że wyprintowało nam tylko te książki, które mają cenę większą niż 60 zł. Czyli mamy tutaj pokochaj siebie w 7 dni i 123 sposoby na bycie szczęśliwy. No okej. A teraz chcielibyśmy zrobić coś jeszcze innego. Na przykład wszystkie książki rozwojowe chcielibyśmy wyprintować załóżmy jako CSV. Bo takie nam są potrzebne. Czemu by nie? No to co robimy? Wszystkie książki rozwojowe, czyli prawdopodobnie taki będzie selektor. Wyczyścimy ekran, żeby to jakoś ładniej wyglądało. I damy Enter. Są książki. I teraz byśmy chcieli to zamienić sobie na CSV. Czyli małpa CSV. Okej. To nie zadziała. Można byłoby to zamienić oczywiście jako arraja w ten sposób, ale to też nie do końca zadziała. Co trzeba zrobić? Trzeba spłaszczyć tą strukturę do takiego formatu, ażeby mogła być ona zapisana w CSV. W plikach CSV nie ma czegoś takiego jak tytuły pól. Dlatego użyjemy czegoś takiego jak funkcja flatten. Zobacz jak to działa. Enter. Ops. Tak zrobimy. Okej. To zostało spłaszczone. Spłaszczone to znaczy, wszystko jest jednowymiarowe. Mamy tutaj nazwę, wartość, wartość na tej zasadzie. Nie ma po prostu tytułu pola. Czyli na przykład nazwa, cena, inne takie rzeczy. I teraz co możemy z tym zrobić? Faktycznie teraz możemy to zapisać jako na przykład plik CSV. I mamy to całkiem ładnie zrobione. Tylko dlaczego tutaj, cudzysłowie, nam zbackspacowało jakieś inne rzeczy? No trochę nieładnie to wygląda. No można sobie uruchomić JQ w trybie row. Czyli nie dodawaj zbyt lepszego formatowania, nie escape'uj danych. Po prostu jak leci, tak wrzucaj na ekran. Enter. I teraz widać, że ten plik CSV wygląda o wiele lepiej. Co jeszcze byśmy mogli zrobić? Wrócimy sobie do początku drzewa i znowu mamy nasze dość zaawansowane tutaj rzeczy. Chcielibyśmy na przykład znowu kategorie rozwojowe wyprintować, czyli to co było wcześniej, ale chciałbym z tej kategorii usunąć po prostu jedną z wartości. Ten slug tutaj, to jest jakiś fragment urla. On jest mi zupełnie do niczego niepotrzebny. No to w takim razie co robię? Używam funkcji o nazwie del, tak jak delete. A następnie kropka slug. I oczywiście zapomniałem kwadratowe nawiasy, wiadomo o co chodzi. Enter. I okazuje się, że tak utworzyłem sobie nowego JSON-a, który nie posiada tego pola, który dla mnie jest zbyteczny. Dobra, co robimy dalej? Załóżmy, chcielibyśmy ceny wszystkich książek w jakiś sposób zsumować. To co robimy? Z tych naszych książek rozwojowych wyprintujemy sobie cenę. I wygląda to w ten sposób. I teraz trzeba dać to do selektora o nazwie add, dodawanie. Znowu tutaj będziemy mieli problem z arrajem. Wysypało się. To łatwo zapamiętać. Za każdym razem jak się wysypuje prawdopodobnie podałeś coś, co jest stringiem, liczbą albo czymkolwiek innym, a powinno być arrajem. No to robimy sobie z tego arraj i wygląda trochę lepiej. Nasze książki kosztują 499 zł w tej kategorii. To jest suma tych trzech liczb. No dobra. A ile my tych książek w ogóle mamy? To jest dobre pytanie, nie? No to co robimy? Wyciągamy książki rozwojowe, załóżmy. OK. I tutaj selektora zgubiłem oczywiście. I teraz pytanie, ile tego jest? Pipe length 33333. Dlaczego w ten sposób? No, znowu zapomnieliśmy czegoś takiego jak nawiasy kwadratowe. I teraz jest lepiej trzy sztuki. Więc mamy tutaj selektory. Łatwo te selektory sobie wymyślić nawet, jeżeli czegoś nie znasz. Pokazałem Ci np. att do dodawania zmiennych. No to jest zapewne funkcja też sub do tego, aby coś odejmować. Mamy tutaj length do sprawdzenia długości. Skoro mamy del do usuwania, to kolejne funkcje można sobie też wymyślić na podstawie tego, że to są nazwy dość naturalne. No dobra. A teraz byśmy chcieli zrobić coś nieco bardziej skomplikowanego. Np. znowu wyprintuję sobie strukturę, jak ona wygląda. Czyli dajemy kropka. I teraz co widzimy? Mamy tutaj sluga, czyli fragment urla. I mamy tutaj podstawowy adres URL. To coś. Teraz chcemy tego sluga dokleić na końcu. Jak to zrobić? Da się to łatwo zrobić, czyli tak. Na początku wyciągamy urla. OK. I teraz mamy coś takiego. Następnie wyciągamy sobie np. kropka kategorie. Kategorie, załóżmy, rozwojowe niech będzie. Rozwojowe. I to jest oczywiście araj. I wyciągamy sobie z tego sluga. Jaki będzie efekt? Dość dziwny. Takie coś. Dlaczego? Bo na początku wyjęło urla, a potem wyjęło wszystkie możliwe slugi. Chcielibyśmy to skleić w jakiś sposób, więc no prościej się nie da. Po prostu sklejasz to. Pusty string. Damy sobie tak, żeby ładnie wyglądało. I teraz jaki będzie efekt? No efekt jest dokładnie taki, jaki chcieliśmy, czyli wszystko działa po naszej myśli. No dobra. Mamy to ogarnięte. Co byśmy jeszcze mogli zrobić? Moglibyśmy np. odwoływać się do książek, załóżmy, z kategorii rozwojowych, ale na podstawie ich numerów. Czyli damy sobie coś takiego. Mamy tutaj tylko trzy sztuki. Pierwszy, drugi, trzeci. Chcielibyśmy książkę numer 1. Pamiętaj, że wszystkie araje numerowane są od zera, więc jeżeli dasz sobie tutaj coś takiego jak 0, to wyciągniesz pierwszą z książek. I teraz co robimy dalej? Gdybyśmy chcieli np. pierwszą oraz drugą, to w ten sposób. I teraz mamy dwie książki. A do tego dorzucimy trzecią? Nie ma problemu, damy sobie trzecią. Trzecią w sensie taka numeracja. I teraz co widzimy? Możliwe dane z naszego JSON-a, ale chcielibyśmy nie wymieniać tysiąca rekordów 1, 2, 3, 4, 5 do tysiąca, tylko zakresowo. Zakres możemy podać np. w ten oto sposób, tylko tutaj jest małe zaskoczenie. Popatrz na ten wynik. Dlaczego wyprintowało tylko jedno? Dlatego, że to jest nie włącznie, tylko to jest do. Jeżeli chcesz, załóżmy, od zera do jeden wyprintować, to musisz dać tutaj dwa. To dwa nie będzie po prostu zaliczone do zwracanych wartości. Jeżeli chcemy wszystkie, to w takim razie do trzy. No i w ten sposób sobie to działa. Te filtry można oczywiście łączyć, tzn. możemy tutaj sobie zrobić selecta i np. po cenie sortować. Gdybyś chciał sortować po wielu polach, to jest tak samo obsługa takich przełączników jak or, and, więc to jak najbardziej powinno wszystko działać. No dobra, to jest w zasadzie wszystko, co powinieneś wiedzieć odnośnie pracy z JQ i to powinno Ci na start wystarczyć. Gdy przeglądniesz dokumentację do JQ, to zrozumiesz, że tych funkcji jest znacznie, znacznie więcej, tych filtrów jest jeszcze więcej i możesz je po prostu ze sobą połączyć tak, aby otrzymać taki wynik, jaki jest Ci potrzebny. Jeżeli interesuje Cię rozwój w takiej kategorii jak właśnie administracja serwerami, to przygotowałem e-booka, którego możesz pobrać płacąc swoim adresem mailowym i link do niego masz w opisie do tego filmu. Jest to 77 zadań z kategorii takich jak administracja Angelnexem albo Apachem, trochę na temat Ansibla, trochę na temat Dockera. Nie ma tam rozwiązania, są tam tylko zadania i ewentualne podpowiedzi do tego, w jaki sposób te zadania rozwiązać. Dzięki rozwiązywaniu takich zadań Twoja wiedza prawdopodobnie wzrośnie. A jeżeli miałeś problem z którymś zadaniem, to nie pisz do mnie bezpośrednio, tylko zrób to w taki sposób, aby też innym dać korzyść, to znaczy zapraszam na grupę facebookową o nazwie Mikrusy. Tam są ludzie, którzy korzystają z mojego projektu mikr.us i tam też ludzie pomagają sobie nawzajem. I z pewnością ktoś pomoże Ci właśnie w rozwiązaniu któregoś z tych zadań. Tyle na dzisiaj. Do zobaczenia w kolejnym filmie. Cześć. Napisy stworzone przez społeczność Amara.org