CodeGym /Kursy /JAVA 25 SELF /Podstawy JSON: struktura, składnia, zalety

Podstawy JSON: struktura, składnia, zalety

JAVA 25 SELF
Poziom 46 , Lekcja 0
Dostępny

1. Czym jest JSON (JavaScript Object Notation)?

JSON (czytamy „dżejson”, a nie „żeson”!) to skrót od JavaScript Object Notation. Mimo słowa „JavaScript” w nazwie JSON jest uniwersalnym formatem, wspieranym przez praktycznie wszystkie języki programowania, w tym Javę.

JSON został opracowany przez Douglasa Crockforda na początku lat 2000 jako prosty sposób wymiany danych między przeglądarką a serwerem. Wcześniej dominował XML – rozwlekły i przeładowany znacznikami.

JSON okazał się bardziej kompaktowy, prostszy i łatwy do czytania „gołym okiem”. Szybko stał się standardem de facto wymiany danych między klientem i serwerem, zwłaszcza w aplikacjach webowych i mobilnych.

Dlaczego JSON stał się standardem?

  • Prosta składnia – łatwo go pisać i czytać ręcznie.
  • Kompaktowość – bez zbędnych znaczników i nadmiarowego balastu.
  • Czytelność – nawet laik zrozumie, o co chodzi.
  • Łatwość parsowania – większość języków ma wbudowane lub zewnętrzne biblioteki.
  • Międzyjęzykowość – Java, Python, Kotlin itd. – JSON obsługują wszystkie.
  • Standard dla REST API – zdecydowana większość API zwraca JSON.

Porównanie z XML

JSON XML
Czytelność Bardzo wysoka Średnia (dużo znaczników)
Rozmiar Kompaktowy Bardziej rozbudowany
Parsowanie Proste Wymaga więcej wysiłku
Rozszerzalność Obsługuje zagnieżdżanie Obsługuje zagnieżdżanie
Formalizm Mniej formalny Można opisywać schematy
Popularność (2020+) Bardzo wysoka Używany, lecz rzadziej

JSON wygrywa niemal w każdym punkcie. Niemniej jednak XML pozostaje aktualny tam, gdzie potrzebne są złożone schematy, ścisłe typowanie, walidacja względem XSD, wsparcie komentarzy i atrybutów – na przykład w starszych systemach i oprogramowaniu bankowym.

W praktyce, jeśli nie piszesz oprogramowania dla banku lub statku kosmicznego, – używaj JSON.

2. Podstawowa składnia JSON

Jeśli pracowałeś z obiektami JavaScript lub słownikami w innych językach, składnia wyda się znajoma. W Javie nie ma bezpośredniego „słownika”, jego rolę pełnią kolekcje z java.util, w pierwszej kolejności Map<K, V> (najczęściej – HashMap<K, V>).

Elementy podstawowe

  • Obiekty – zbiory par „klucz: wartość”, ujęte w { }.
  • Tablice – uporządkowane listy wartości, ujęte w [ ].

Przykład obiektu:

{
  "name": "Alice",
  "age": 25
}

Przykład tablicy:

[1, 2, 3, 4, 5]

Przykład obiektu z tablicą:

{
  "students": [
    "Ivan",
    "Maria",
    "John"
  ]
}

Dozwolone typy wartości

W JSON można używać tylko następujących typów danych:

Typ Przykład Opis
Łańcuch
"hello"
Zawsze w podwójnych cudzysłowach
Liczba
123, 3.14, -7
Całkowite i zmiennoprzecinkowe
Boolean
true, false
Wartości logiczne
null
null
„Pusto”, brak wartości
Obiekt
{ ... }
Zbiór par „klucz: wartość”
Tablica
[ ... ]
Lista wartości

Uwaga: klucze w obiektach to zawsze ciągi w podwójnych cudzysłowach, na przykład "name". Pojedyncze cudzysłowy są niedozwolone.

Przykłady poprawnego JSON

{
  "id": 1,
  "name": "Bob",
  "active": true,
  "scores": [10, 20, 30],
  "profile": {
    "email": "bob@example.com",
    "phone": null
  }
}

Przykład niepoprawnego JSON (błędy)

{
  name: 'Bob', // Błąd: klucze i łańcuchy — tylko w podwójnych cudzysłowach!
  age: 25,
}

3. Struktura danych: zagnieżdżanie obiektów i tablic

JSON obsługuje głębokie zagnieżdżanie: obiekty w obiektach, tablice w obiektach, obiekty w tablicach itd. To jak matrioszka.

Przykład złożonego dokumentu JSON

{
  "university": "Java University",
  "students": [
    {
      "name": "Ivan",
      "age": 20,
      "courses": ["Math", "Java", "English"]
    },
    {
      "name": "Maria",
      "age": 19,
      "courses": ["Biology", "Java", "Art"]
    }
  ],
  "active": true
}

W obiekcie korzeniowym znajduje się pole łańcuchowe "university", pole boolowskie "active" oraz tablica "students", w której znajdują się obiekty studentów.

Schemat wizualny (diagram blokowy)

{
  "klucz": wartość,
  "tablica": [
    { "klucz": wartość },
    { "klucz": wartość }
  ],
  "obiekt": {
    "klucz": wartość
  }
}

4. Zalety JSON

Dlaczego JSON jest tak popularny?

  1. Łatwy do odczytu przez człowieka i maszynę – strukturę łatwo zrozumieć.
  2. Kompaktowość – minimum zbędnych znaków.
  3. Proste parsowanie – mnóstwo bibliotek do odczytu/zapisu.
  4. Standard dla REST API i aplikacji mobilnych – stosowany powszechnie.
  5. Elastyczność – opisuje zarówno proste listy, jak i struktury drzewiaste.
  6. Konfiguracje, ustawienia, przechowywanie danych – często używany w konfiguracjach.
  7. Wsparcie we wszystkich językach – Java, Python, Go, Rust itd.

5. Praktyka: analiza przykładów plików JSON

Przykład 1: Lista użytkowników

[
  {
    "id": 1,
    "name": "Alice"
  },
  {
    "id": 2,
    "name": "Bob"
  }
]

To tablica, w której każdy element jest obiektem użytkownika.

Przykład 2: Konfiguracja aplikacji

{
  "debug": true,
  "maxConnections": 100,
  "database": {
    "host": "localhost",
    "port": 5432,
    "user": "admin",
    "password": "qwerty"
  }
}

Obiekt z zagnieżdżonym obiektem "database". Bardzo przypomina rzeczywiste ustawienia aplikacji.

Przykład 3: Błędy w JSON

{
  "name": "Alice",
  "age": 25,
} // Błąd: zbędny przecinek przed nawiasem zamykającym!

Zapamiętaj: w JSON nie wolno stawiać przecinka po ostatnim elemencie.

Przykład 4: Klucze bez cudzysłowów

{ name: "Alice", age: 25 } // Błąd: klucze muszą być w podwójnych cudzysłowach!

6. Przydatne szczegóły

Tabela: co wolno, a czego nie wolno w JSON

Wolno Nie wolno
"klucz": "wartość"
'klucz': 'wartość'
"klucz": 123
"klucz": 0123
"klucz": null
"klucz": undefined
"klucz": true
"klucz": True
"klucz": [1, 2, 3]
"klucz": [1, 2, 3,]

Krótkie porównanie JSON i obiektów Java

Java JSON
int, double, boolean
Liczba, true/false
String
"tekst"
List<T>, tablica [wartość1, wartość2, ...]
Map<String, Object>
{ "klucz": wartość, ... }
null
null
Klasa z polami { "pole": wartość, ... }

Przykład: klasa Java i jej reprezentacja w JSON

public class Student {
    public String name;
    public int age;
}
{
  "name": "Alice",
  "age": 20
}

7. Typowe błędy podczas pracy z JSON

Błąd nr 1: pojedyncze cudzysłowy zamiast podwójnych. JSON akceptuje tylko podwójne cudzysłowy dla kluczy i łańcuchów.

{ 'name': 'Alice' } // Błąd!

Błąd nr 2: zbędny przecinek. Nie wolno stawiać przecinka po ostatnim elemencie.

{ "name": "Alice", } // Błąd!

Błąd nr 3: klucze bez cudzysłowów. Klucze zawsze muszą być w podwójnych cudzysłowach.

{ name: "Alice" } // Błąd!

Błąd nr 4: liczby z wiodącymi zerami. Takie liczby są niedozwolone.

{ "age": 025 } // Błąd!

Błąd nr 5: użycie undefined. W JSON nie ma undefined, użyj null.

{ "value": undefined } // Błąd!

Błąd nr 6: True/False z wielkiej litery. W JSON tylko true i false (małymi literami).

{ "active": True } // Błąd!
1
Zadanie
JAVA 25 SELF, poziom 46, lekcja 0
Niedostępne
Magiczne dane bohatera 🧙‍♂️
Magiczne dane bohatera 🧙‍♂️
1
Zadanie
JAVA 25 SELF, poziom 46, lekcja 0
Niedostępne
Tworzenie karty dla biblioteki cyfrowej 📚
Tworzenie karty dla biblioteki cyfrowej 📚
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION