W tym wpisie przybliżę od podstaw temat standardu JSON, co będzie nam przydatne do pełniejszego zrozumienia niektórych fragmentów innych artykułów i przyszłych, które planuję wypuścić w najbliższym czasie.

Jaki problem rozwiązuje JSON?: Często zachodzi potrzeba wymiany danych pomiędzy aplikacjami lub pomiędzy składowymi architektury (np. pomiędzy front-endem a back-endem aplikacji). Wysyłając wartości liczbowe lub prosty string nie mamy żadnego dylematu – problem zaczyna się wtedy, kiedy chcemy przekazać tablicę, obiekt, lub serię danych zawartych w jednej zmiennej. Właśnie w takim przypadku używamy formatu JSON.

Format JSON

JSON (ang. JavaScript Object Notation) to otwarty format zapisu struktur danych. Jego przeznaczeniem jest najczęściej wymiana danych pomiędzy aplikacjami. JSON składa się z par atrybut – wartość oraz typów danych tablicowych. Notacja JSONa jest zbieżna z obiektami w języku JavaScript.

Jego zaletą jest popularność, prostota działania, zwięzłość syntaktyki a jako że dane są zapisywane do tekstu – po sformatowaniu czytelne dla ludzi. Został stworzony w 2001 roku a autorem jego specyfikacji opisanej w dokumencie RFC 8259 jest Douglas Crockford.

JSON może być alternatywą dla XML lub CSV. Pliki JSON zapisujemy z rozszerzeniem .json a typem MIME dla plików .json jest „application/json”. Logo JSON to torus Mobiusa.

Oficjalne logo formatu JSON

Działanie JSON w praktyce

Stwórzmy parę przykładowych obiektów JSON. Edycja kodu może następować w dowolnym edytorze tekstowym. Jeżeli nie posiadamy własnych ulubionych narzędzi, sprawdzenia poprawności kodu można dokonać wklejając kod do lewego okienka w aplikacji jsoneditoronline.org

Obiektem w JSON może być cokolwiek: produkt, osoba, zbiór książek, a nawet utwór muzyczny:

{
"title" : "This Is What You Came For"
}

Zwróć uwagę na dwukropek, który oddziela klucz od wartości. Znaki cudzysłowu muszą być podwójne, zauważ, że są one przy kluczu i wartości. Możemy teraz dodać dodatkowe pola:

{
"title" : "This Is What You Came For",
"artist" : "Calvin Harris",
"length" : "3:41",
"released" : "2016.04.29"
}

„Kolumny” są oddzielone od siebie przecinkami ale nie dajemy go na końcu serii. JSON nie narzuca właściwych formatów daty czy jednostek. Wszystko w rękach programistów.

Wartościami w JSONie mogą być:

  • ciąg znaków,
  • liczba (można pominąć cudzysłów),
  • obiekt JSON (zagnieżdżony),
  • tablica,
  • wartość prawda/fałsz (zapis małymi literami true albo false)
  • null.

Obiekty JSON można zagnieżdżać. Jeżeli chcemy być spójni z pierwszym przykładem, zbiorem utworów może być album lub playlista z ulubionymi piosenkami.

 {
   "artist": "Tool",
   "albums": [
   {
   "title": "Lateralus",
   "year": "2001",
   "songs": [
      {
      "title": "The Grudge",
      "length": "8:36"
      },
      {
      "title": "Eon Blue Apocalypse",
      "length": "1:04"
     },
     {
     "title": "The Patient",
     "length": "7:13"
     },

I tak dalej… Zwróć uwagę na nawiasy kwadratowe które przechowują tablicę, lub tablicę obiektów. Podsumowując:

  • obiekty otaczamy nawiasami klamrowymi {}
  • tablice otaczamy nawiasami kwadratowymi []

Najbardziej złożony przykład może reprezentować dyskografię danego artysty z zagnieżdżonymi utworami. Podobnej struktury można użyć do stworzenia aplikacji podobnych do Spotify:

Przykład wykorzystania JSON – baza danych

W tym przykładzie obiekty utworów są wartościami tablicy „songs”. A poszczególne albumy są elementami tablicy „albums”. Utwory są zagnieżdżone w albumach.

Różnice pomiędzy serialize a json_encode

W AJAX używaliśmy serialize() do przesłania danych z formularza. Czy to jest to samo? Czym się różni serialize() od json_encode()?

Choć idea jest podobna bo za pomocą tych metod zapisujemy do tekstu dane z jakiegoś obiektu, to co mamy na wyjściu przy serialize() znacznie różni się od wyniku json_encode().

Zamiast bawić się w teoretyków sprawdźmy to w praktyce na prostym przykładzie z tablicą kolorów:

<pre>
<?php
   $kolory = ["czerwony", "zielony", "niebieski"];
   $json_kolory = json_encode($kolory);
   $serialize_kolory = serialize($kolory);
   echo "JSON:\n";
   print_r($json_kolory);
   echo "\n\nserialize():\n";
   print_r($serialize_kolory);
?>
</pre>

W wyniku takiego skryptu otrzymamy:

Różnice pomiędzy serialize a JSON

Jak widać, serialize zapisuje dodatkowe dane o ilości elementów czy długości ciągów. JSON zapisuje to co było w tablicy bez dodatków co ma swoje wady i zalety. Tak czy inaczej zapis JSON jest czytelniejszy i będzie zajmował mniej miejsca na dysku.

Zalety JSON

Podsumujmy zatem najważniejsze zalety posługiwania się formatem JSON.

  • prostota i czytelność – powoduje że praca z tym formatem jest łatwa i intuicyjna,
  • lekkość – tekst formatu JSON zawiera mniej znaków, ponieważ nie przechowuje nadmiarowych informacji,
  • natywny dla JavaScript – szybsze parsowanie w stosunku do innych formatów, które wymagają kosztownych transformacji,
  • popularny i rozpowszechniony – co powoduje możliwość wykorzystania go w wielu językach i systemach.

Wady JSON

Jak wszystko, także JSON ma słabe strony.

  • mniejsza powszechność od XML – bo JSON to stosunkowo młody wynalazek,
  • większy rozmiar – w porównaniu do formatów binarnych,
  • nie można używać komentarzy

Zastosowania JSON

JSON już nie raz pojawił się na tym blogu:

Nawet bez wchodzenia w programowanie mamy do czynienia z formatem JSON.

Za pomocą JSONa pobieramy przykładowe dane do motywów CMS. Do plików JSON zapisywane są także różne ustawienia z wtyczek lub aplikacji.

Formatu JSON używa się także do zapisywania złożonych struktur danych w bazach SQL.

JSON w małych projektach może zastępować całą bazę danych i przechowywać np. zawartość strony internetowej.

Parsowanie JSON w JavaScript

Parsowanie JSON w JavaScript można łatwo wykonać za pomocą instrukcji JSON.parse(); W argumencie metody podajemy właściwy JSON lub zmienną przechowującą surowy tekst z danymi w tym formacie.

var data = JSON.parse(xhr.responseText);

Następnie możemy się odwoływać do poszczególnych komórek tak jak w obiektach JavaScript.

console.log(data.content);

Zmienna content zależy już od właściwych nazw pól użytych w parsowanym JSONie. Praktyczne wykorzystanie tej metody można sprawdzić w artykule: WordPress REST API – kurs od podstaw.

Parsowanie, odczyt i zapis JSON w PHP

W PHP mamy natywne funkcje do odczytu, którą wykorzystujemy w imporcie danych. Aby otrzymać obiekt korzystamy z instrukcji:

$data = json_decode($json); 

Aby otrzymać tablice asocjacyjną dodajemy tylko dodatkowy parametr:

$data = json_decode($json, true); 

Zapis tablicy do formatu JSON realizujemy za pomocą:

$json = json_encode($data);

Podsumowanie

JSON to obecnie standard w przypadku wymiany danych pomiędzy systemami i składowymi architektury w aplikacjach webowych. Jest to narzędzie, którym warto się posługiwać aby sprawniej wykonywać integracje, nowoczesne aplikacje a nawet działania SEO.

Źródła

https://www.json.org/json-en.html

https://medium.com/@moinuddinchowdhury/serialize-vs-json-67fe872a7755

Oceń artykuł na temat: JSON – co to jest i dlaczego warto używać?
Średnia : 4.7 , Maksymalnie : 5 , Głosów : 35