fbpx

Format JSON, który zagości na kartach bloga, to temat niezwykle lekki i przyjemny. Format, który staje się powoli kultowy, często używany w memach i śmiesznych filmach ze świata IT. I wcale nie trzeba daleko szukać, bo któż z nas nie kojarzy Zbigniewa Jsona z kanału HRejterzy!

Na pierwszy rzut oka format JSON wygląda brzydko, jednak jego lekkość i praca z nim to czysta przyjemność. Pozwolę sobie odpowiedzieć na następujące pytania:

  • Czym jest format JSON i co oznacza ten akronim?
  • Do czego służy?
  • Jak wygląda składnia?
  • W jaki sposób go używać?

Cztery pytania postawione, więc czas brać się do pracy!

Zatrzymaj się!


Książka „Programistą być” to obowiązkowa pozycja dla każdego, kto interesuje się tematem programowania!

Z książki dowiesz się między innymi o tym:

  • Czy matematykastudia techniczne i język angielski są konieczne do tego, by rozpocząć pracę jako programista?
  • Gdzie szukać informacji o programowaniu i w jaki sposób się uczyć?
  • Jak znaleźć pierwszą pracę i w jaki sposób rozwijać swój programistyczny potencjał?
  • Czym na co dzień zajmuje się programista?
  • Czy każdy może zostać programistą?

I wiele, wiele więcej…


Format JSON – wprowadzenie

Zacznijmy od rozszyfrowania akronimu. JSON to skrót od JavaScript Object Notation, co w wolnym tłumaczeniu oznacza Notacja Obiektowa JavaScriptu. I nie da się ukryć, format JSON wywodzi się z języka JS i jest tam głównym nośnikiem informacji, jednak niech Was nie zmyli jego pochodzenie. Używany jest aktualnie w niemal każdym wysokopoziomowym języku programowania. Sprawia to, że jest on niezależny od języka programowania.

Format JSON ma już swoje lata, ponieważ powstał na początku XXI wieku, a dokładnie w roku 2001. Twórcą oficjalnie uznawany jest amerykański programista Douglas Crockford. Jest to jedna z osobowości, wokół której rozwijał się ówczesny JS.

Według definicji JSON to lekki format danych służący do wymiany danych między systemami oraz przechowywania w tym formacie niektórych informacji konfiguracyjnych systemu. Wszystko to dzieje się za pomocą plików tekstowych z rozszerzeniem (kto by się spodziewał) .json.

Wartym uwagi jest jeszcze fakt, że plik JSON zawiera jedynie dane w ściśle uporządkowany sposób — za pomocą pól klucz i wartość. Nie ma tam dostępnych funkcji czy zmiennych. Ten fakt mocno wpływa na prostotę formatu.

Składnia

Czym byłby ten artykuł bez omówienia składni JSONa. Zakładam się, że nawet jeżeli nie programujesz, to miałeś/aś możliwość w wielu miejscach zobaczenia tego tworu.

Obiektem przechowywanym w pliku JSON może być cokolwiek. Pierwsze, na co trzeba zwrócić uwagę to nawiasy klamrowe {}. One są podstawowym znacznikiem w formacie JSON. Rozpoczynają i kończą każdy blok danych.

Poniżej w nawiasach mamy dwie dane, po pierwsze imię, które oznaczone jest kluczem firstName. Druga dana to nazwisko oznakowane kluczem lastName. Zwróć, proszę uwagę na to, że zarówno klucze, jak i wartości, czyli Mateusz Rus znajdują się w cudzysłowie. 

Klucz i wartość oddzielona jest dwukropkiem, natomiast każde pole od siebie oddziela przecinek. 

{
    "firstName" : "Mateusz",
    "lastName" : "Rus"
}

Skomplikujmy odrobinę składnię i zobaczmy prawdziwe oblicze formatu JSON! Bardzo mocną zaletą jest to, że możemy budować wewnątrz pliku JSON obiekty. Zagnieżdżać elementy i identyfikować je za pomocą identyfikatora — zazwyczaj w formie specjalnego ciągu znaków nazywanych GUIDem.

To, co na pierwszy rzut oka widać, to obiekt passions, który objęty jest nawiasami kwadratowymi []. W obiekcie tym dodane są trzy zagnieżdżone elementy, które posiadają unikalne ID. Warto w tym miejscu jeszcze wspomnieć o tworzeniu nazw, czyli zaczynamy klucz od małej litery, stosujemy tak zwaną notację camelCase (inaczej notacja wielbłądzia), która polega na tym, by zmienne tworzyć w jednym ciągu, a każdą pierwszą literę kolejnego wyrazu rozpoczynamy dużą literą (toJestZmiennaCamelCase). Dodatkowo nazwa obiektu, która ma w sobie inne obiekty, powinna być nazwana w liczbie mnogiej, chociaż to akurat wydaje się logiczne.

{
   "firstName":"Mateusz",
   "lastName":"Rus",
   "passions":[
      {
         "id":"ebd5a3ba-0dc3-446f-a99e-5b2d065f91da",
         "name":"programowanie"
      },
      {
         "id":"e8855a53-d31d-4dd1-b2c8-38e069463604",
         "name":"sport"
      },
      {
         "id":"aabeb531-3a67-4411-8630-25db04431c33",
         "name":"książki"
      }
   ]
}

Format JSON – implementacja

No i pięknie, teoretycznie mamy omówione już wszystko. Teraz czas przejść do kilku skryptów, które pokażą nam możliwości i zastosowania formatu JSON. 

Zajmiemy się serializacją i deserializacją obiektu w języku Python. Jest to podstawowa operacja, którą wykonuje się podczas pracy z JSON. Po pierwsze musimy dodać do programu bibliotekę json. Następnie przygotować obiekt, który będziemy serializować do formatu JSON. Co ciekawe, zobacz, że już na tym etapie słownik w Python jest niemal identyczny z JSON! Przy okazji, o słownikach miałem okazję pisać w artykule numer 50.

Aby zserializować obiekt słownikowy do formatu JSON, musimy posłużyć się metodą dumps, która na wejście otrzyma słownik wraz z informacją o wielkości wcięć, a na wyjście poda nam wartość tekstową, która będzie gotowym JSON, którego możemy na przykład zapisać do pliku.

Deserializacja działa w odwrotną stronę — najpierw dostaje tekst w formacie JSON, a następnie tworzy z tego obiekt typu słownikowego. I tak kolejno w zmiennej jsonText przechowamy nasze dane w postaci zminifikowanej, czyli bez białych znaków typu spacja.

Teraz wystarczy użyć metody loads i cała praca zostanie wykonana za nas. Na wejście podajemy tekst, a na wyjściu otrzymamy obiekt, do którego możemy odwoływać się po kluczach. Dla przykładu pobrałem imię i nazwisko oraz wykonałem prostą pętlę, która wypisuje dane z obiektu zagnieżdżonego. Warto jeszcze zauważyć, że musiałem zastosować funkcję replace, która pojedynczy cudzysłów zamienia na podwójny. I tu mam zadanie dla Ciebie, jak można zapis z linii 54 zrobić optymalnie? 

# serializacja

import json
my_data = {
    "firstName": "Mateusz",
    "lastName": "Rus",
    "passions": [
        {
            "id": "ebd5a3ba-0dc3-446f-a99e-5b2d065f91da",
            "name": "programowanie"
        },
        {
            "id": "e8855a53-d31d-4dd1-b2c8-38e069463604",
            "name": "sport"
        },
        {
            "id": "aabeb531-3a67-4411-8630-25db04431c33",
            "name": "książki"
        }
    ]
}
json_data = json.dumps(my_data, indent=2)
print(json_data)

# {
#   "firstName": "Mateusz",
#   "lastName": "Rus",
#   "passions": [
#     {
#       "id": "ebd5a3ba-0dc3-446f-a99e-5b2d065f91da",
#       "name": "programowanie"
#     },
#     {
#       "id": "e8855a53-d31d-4dd1-b2c8-38e069463604",
#       "name": "sport"
#     },
#     {
#       "id": "aabeb531-3a67-4411-8630-25db04431c33",
#       "name": "ksi\u0105\u017cki"
#     }
#   ]
# }


# deserializacja
jsonText = '{"firstName":"Mateusz","lastName":"Rus","passions":[{"id":"ebd5a3ba-0dc3-446f-a99e-5b2d065f91da","name":"programowanie"},{"id":"e8855a53-d31d-4dd1-b2c8-38e069463604","name":"sport"},{"id":"aabeb531-3a67-4411-8630-25db04431c33","name":"książki"}]}'

jsonDeserialize = json.loads(jsonText)

print(jsonDeserialize["firstName"])
print(jsonDeserialize["lastName"])

for item in jsonDeserialize["passions"]:
    jsonDeserializePassion = json.loads(str(item).replace("'", '"'))
    print(jsonDeserializePassion["id"])
    print(jsonDeserializePassion["name"])

# Mateusz
# Rus
# ebd5a3ba-0dc3-446f-a99e-5b2d065f91da
# programowanie
# e8855a53-d31d-4dd1-b2c8-38e069463604
# sport
# aabeb531-3a67-4411-8630-25db04431c33
# książki

Format JSON – podsumowanie

Artykuł krótki, bo i format JSON to temat przyjemny. Warto samemu przećwiczyć możliwości formatu JSON. Celowo nie poruszałem tego zagadnienia w innych językach i z użyciem zewnętrznych narzędzi typu Postman, ponieważ na narzędzie chciałbym poświęcić osobny artykuł. Do tego artykułu będzie nam jeszcze potrzebna wiedza z zakresu formatu XML, więc mam co pisać!

Będę informować, gdy już się pojawią wspomniane zagadnienia. Na koniec jeszcze raz dam wskazówkę co do tego, by zwracać uwagę na detale. Po pierwsze poprawne nazewnictwo, po drugie cudzysłów ma znaczenie i po trzecie, rozmiar również ma znaczenie, dlatego warto czasami minifikować pliki, zwłaszcza te dużych rozmiarów!

W następnym wpisie poruszę temat bardzo popularny, czyli czy matematyka jest dla każdego.

PS. Będę wdzięczny za komentarze pod tym postem!

PS2. Czeka też na Ciebie prezent. Wystarczy, że zapiszesz się na Newsletter poniżej!

PS3. Dołącz do naszej grupy na Facebook!

Subskrybuj

Zapisz się do Mailowej Akademii Programowania.

MAP to jedyne takie miejsce, gdzie co niedzielę otrzymasz rozwiązanie programistycznego zadania.

Do tego otrzymasz darmowe konsultacje w przypadku odpowiedzi na moje maile. Wspólnie staniemy się lepszymi programistami!

Nie przegap i dołącz już dziś do 747 osób będących w MAP!

Brzmi ciekawie? Nie zwlekaj i dołącz już teraz!

PS. Na start otrzymasz bonus w formie PDF z rozwiązanymi dziesięcioma programistycznymi problemami!

Autor

👨‍💻 .NET and Python programming passionate 🏦 Digtial Banking Solutions 🎓 Student 📊 Psychology 📚 Bookworm 🏠 Warsaw

1 Komentarz

  1. Hej Mateusz,

    Ja chciałbym się zapytać jaki format wymiany danych, XML czy JSON, byś był bardziej skłonny polecić, i dlaczego?

    Ja parę lat temu, no może dłużej 😄, pisałem aplikację ToDo w JS, ponieważ wtedy uczyłem się tego języka z książki.

    Do przechowywania danych użyłem właśnie formatu XML. Pamiętam że trochę było do ogarnięcia z tym ponieważ, nie wiem czy tak dalej jest, przy działaniu na plikach XML z JS, można natrafić na puste nodey i to trochę utrudnia pracę. Na pewno początkujący może zbaranieć dlaczego funkcja nie zwraca mu pożądanej wartości skoro wszystko dobrze selektował. A tu taki po prostu pusty node jest i co poradzić. Trzeba o tym pamiętać, ale nie wiem czy tak jeszcze jest.

    Chciałem jeszcze zapytać w jakich sytuacjach polecił byś, w produkcji, testowanie aplikacji na bazach danych np. SQLite3 a w jakich sytuacjach bardziej sprawdził by się JSON czy XML? Czy w ogóle to pytanie ma sens 😄?

    „I tu mam zadanie dla Ciebie, jak można zapis z linii 54 zrobić optymalnie? ” – przyznam się że nie wiem.

    Dzięki za fajny artykuł i pozdrawiam 👋.

Napisz komentarz

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

Programistą być to przewodnik po programistycznym świecie, który każdy zainteresowany programowaniem powinien przeczytać!

X