CodeGym /Kursy /C# SELF /Podstawy JSON-forma...

Podstawy JSON-formatu i jego popularność

C# SELF
Poziom 43 , Lekcja 4
Dostępny

1. Wprowadzenie

Jeśli choć raz otwierałeś nowoczesne API, pracowałeś z web-serwisami, aplikacjami mobilnymi albo nawet po prostu próbowałeś zapisać coś w "uniwersalnym formacie" — już spotkałeś się lub spotkasz z JSON. To format, który dosłownie "łączy" różne języki programowania i nawet różne platformy: C#, JavaScript, Python — wszyscy mówią za pomocą JSON.

Dlaczego właśnie JSON stał się gwiazdą serializacji? Odpowiedź jest prosta: to kompaktowy, czytelny dla człowieka i lekki tekstowy format wymiany danych strukturalnych. Jego popularność to wynik udanego połączenia prostoty, uniwersalności i świetnego wsparcia w językach programowania.

Czym jest JSON?

JSON — to skrót od JavaScript Object Notation. Format wywodzi się ze świata JavaScript, ale bardzo szybko wyskoczył z przeglądarek do szerszego świata. Ważne: pomimo pochodzenia nazwy, JSON nie jest związany z JavaScript i jest równie wygodny dla wszystkich języków programowania.

Format został wymyślony na początku lat 2000 przez Douglasa Crockforda jako prostsza alternatywa dla rozwlekłego XML. Idea jest prosta: „JSON jest krótszy, prostszy i łatwiejszy do czytania”.

2. Podstawowe zasady formatu JSON

Najważniejsze: JSON — to ściśle określony tekstowy format dla danych strukturalnych. Żadnej magii, tylko zwykły tekst, który można otworzyć w dowolnym edytorze.

Podstawowe konstrukcje:

  • Tablice (arrays): uporządkowane listy wartości.
  • Obiekty (objects): zestawy par klucz-wartość.
  • Proste typy: stringi, liczby, wartości boolowskie (true, false) oraz specjalna wartość null.

Przykład minimalnego dokumentu JSON:

{
    "name": "Iwan",
    "age": 25,
    "isStudent": true,
    "scores": [5, 4, 5, 3],
    "contacts": {
        "email": "ivan@example.com",
        "phone": null
    }
}

Schematyczna struktura

Oto prosta tabela odpowiadań typów C# i reprezentacji w JSON:

Typ C# Przykład JSON
string
"name": "Iwan"
int, double
"score": 5
bool
"isStudent": true
tablica (int[], ...)
"scores": [5,4,5,3]
obiekt (class, ...)
"contacts": { ... }
null
"phone": null

Zasady zapisu JSON

  1. Stringi zawsze w podwójnych cudzysłowach: 'text' — błąd, poprawnie "text".
  2. Klucze obiektów — stringi w podwójnych cudzysłowach: np. "name": ...
  3. Przecinki tylko między elementami, bez przecinka po ostatnim elemencie.
  4. Wcięcia nie są obowiązkowe, ale poprawiają czytelność.
  5. Liczby bez cudzysłowów: "age": 25, a nie "age": "25".
  6. Wartości boolowskie — true/false (bez cudzysłowów), nie True, FALSE ani "true".
  7. null zapisujemy jako null (bez cudzysłowów).

3. JSON oczami programisty

Analogie do typów C#:

  • JSON-obiektDictionary<string, object>
  • JSON-tablicaT[] lub List<T>
  • JSON-string ≈ zwykły string
  • JSON-liczbaint lub double (w zależności od wartości)

Przykład serializacji obiektu do JSON

Klasa:

public class Student
{
    public string Name { get; set; } = "";
    public int Age { get; set; }
    public bool IsStudent { get; set; }
    public int[] Scores { get; set; } = Array.Empty<int>();
}

Otrzymany JSON (upraszczamy, szczegóły serializacji później):

{
    "Name": "Iwan",
    "Age": 25,
    "IsStudent": true,
    "Scores": [5, 4, 5, 3]
}

4. Przykłady dopuszczalnych struktur JSON

Obiekt z tablicą i zagnieżdżonymi obiektami

{
  "product": "Kawa",
  "price": 125.50,
  "inStock": true,
  "attributes": {
    "weight": 500,
    "unit": "g"
  },
  "tags": ["napój", "energia", "arabika"],
  "promotions": null
}

Tablica obiektów

[
  {"id": 1, "name": "Petja"},
  {"id": 2, "name": "Masza"},
  {"id": 3, "name": "Wasja"}
]

5. Przykłady niedopuszczalnego JSON (i dlaczego)

Pojedyncze cudzysłowy:

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

JSON wymaga podwójnych cudzysłowów.

Przecinek po ostatnim elemencie:

{ "x": 1, "y": 2, } // Błąd!

Nadmiarowy przecinek na końcu nie jest dozwolony.

Komentarze:

{
  // Taka ładność niestety nie działa w JSON
  "name": "Iwan"
}

W JSON nie ma komentarzy.

6. Po co JSON w realnych projektach?

Przekazywanie danych między systemami

JSON — uniwersalny "wspólny język" między różnymi aplikacjami, najczęściej warstwowo przez HTTP. Na przykład serwer w C# komunikuje się z frontendem w JavaScript — ich wspólny format to JSON.

Przechowywanie ustawień i danych

Wiele aplikacji trzyma ustawienia w plikach .json. Na przykład appsettings.json — standard dla aplikacji .NET. Plusy: łatwo przeczytać, zmienić i wersjonować.

API serwerowe i mobilne

Większość REST API używa JSON jako formatu zapytań i odpowiedzi: np. lista użytkowników przychodzi jako tablica obiektów.

Konfiguracja narzędzi i bibliotek

Wiele narzędzi w .NET (Serilog, Swagger i inne) używa JSON do konfiguracji. XML pojawia się coraz rzadziej — JSON jest bardziej zwarty i przejrzysty.

7. Popularność JSON: dlaczego wszyscy go lubią?

  • Czytelność. Nawet osoba bez doświadczenia programistycznego zorientuje się, co jest czym.
  • Wygoda przesyłu przez sieć. Zwykły tekst, mały "ciężar".
  • Wsparcie we wszystkich językach. Serializacja/deserializacja dostępna "out of the box".
  • Wygodny do konfiguracji. Wszelkie edytory dobrze z nim współpracują.
  • Łatwość generowania. Stworzenie JSON jest bardzo proste.
  • Tablice, zagnieżdżenia, null. Wszystko intuicyjne, bez "skoków nawiasowych" jak w XML.

Kiedy lepiej wybrać JSON?

  • Tworzysz aplikację mobilną lub webową;
  • Pracujesz z API zewnętrznych serwisów;
  • Chcesz, żeby aplikacja była przyjazna dla przyszłych integracji.

8. Jak C# pracuje z JSON

Krótk o popularnych bibliotekach .NET:

Minimalny przykład serializacji/deserializacji:

using System.Text.Json;

// Zamieniamy obiekt na string JSON
var student = new Student { Name = "Iwan", Age = 25, IsStudent = true, Scores = new[] {5, 4, 5, 3} };
string json = JsonSerializer.Serialize(student);

// I odwrotnie: czytamy obiekt ze stringa JSON
Student? parsed = JsonSerializer.Deserialize<Student>(json);

Console.WriteLine(json);

9. Typowe błędy początkujących przy pracy z JSON

Częsty błąd — pomylić cudzysłowy albo zapomnieć przecinek. Czasem próbują dodać komentarze (jak w C# — bo to wygodne!), ale JSON tego nie wybacza.

Kolejna częsta sytuacja — serializacja obiektów z niezainicjalizowanymi kolekcjami: w rezultacie dostajemy "scores": null zamiast oczekiwanej tablicy. Inicjalizuj kolekcje wcześniej.

Pamiętaj, że JSON to tekst: duże objętości danych zajmują dużo pamięci. Jeśli zserializujesz powiedzmy 500 MB do JSON, aplikacja może wyraźnie odczuć spadek wydajności.

1
Ankieta/quiz
Poznajemy serializację, poziom 43, lekcja 4
Niedostępny
Poznajemy serializację
Pojęcie serializacji danych
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION