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.

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:

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:

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:
- dane strukturalne JSON-LD,
- komunikacja pomiędzy aplikacjami w REST API,
- tworzenie aplikacji progresywnych (manifest.json),
- integracja JS PHP Zaloguj przez Google,
- obsługa formularzy na stronach AMP.
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
Odpowiedz lub skomentuj