JSON (JavaScript Object Notation) — to lekki tekstowy format wymiany danych, oparty na składni obiektów JavaScript. Jest używany wszędzie: od REST API i plików konfiguracyjnych po przechowywanie danych w bazach i aplikacjach mobilnych. Według oficjalnej strony JSON, format nie jest zależny od języka programowania i jest obsługiwany przez praktycznie wszystkie nowoczesne platformy. JSON stał się standardem de facto do przesyłania danych między klientem a serwerem.
Najważniejsze
JSON — to tekstowy format do reprezentacji danych strukturalnych, oparty na składni JavaScript. Mimo pochodzenia z JavaScript, format jest całkowicie niezależny od języka — parser i serializatory istnieją dla wszystkich popularnych języków programowania.
Historia JSON rozpoczęła się na początku lat 2000., kiedy Douglas Crockford wydzielił podzbiór składni JavaScript do wymiany danych. W 2013 roku format został znormalizowany jako ECMA-404, a później jako ISO/IEC 21778:2017. Nazwa oznacza JavaScript Object Notation.
Główną zaletą JSON jest minimalistyczna składnia. Do opisu danych używa się tylko sześciu typów: string, liczba, boolean, null, tablica i obiekt. To wystarcza do reprezentacji dowolnych struktur danych używanych w aplikacjach.
Składnia JSON jest niezwykle prosta: dane są reprezentowane jako pary klucz-wartość, gdzie klucz to string w podwójnych cudzysłowach, a wartość to jeden z sześciu podstawowych typów. Obiekty są zamykane w nawiasy klamrowe, tablice w kwadratowe. Stringi obowiązkowo używają podwójnych cudzysłowów, pojedyncze cudzysłowy są niedozwolone.
Liczby w JSON mogą być całkowite lub zmiennoprzecinkowe, dodatnie lub ujemne, z notacją wykładniczą. Wartości logiczne są reprezentowane przez literały true i false, a brak wartości przez null. Tablice zawierają uporządkowany zbiór wartości dowolnego typu, w tym zagnieżdżone tablice i obiekty.
{
"name": "JSON",
"type": "text",
"version": 2024,
"flexible": true,
"extensions": null,
"languages": [
"JavaScript",
"Python",
"Java"
],
"nested": {
"info": "obsługa zagnieżdżania"
}
}
| Typ | Przykład | Opis |
|---|---|---|
| String | “tekst” |
W podwójnych cudzysłowach, z sekwencjami escape |
| Liczba | 42 |
Całkowita, zmiennoprzecinkowa, wykładnicza |
| Boolean | true |
true lub false — bez cudzysłowów |
| null | null |
Brak wartości |
| Obiekt | {} |
Nieuporządkowany zbiór par klucz-wartość |
| Tablica | [] |
Uporządkowana lista wartości |
JSON jest podstawowym formatem wymiany danych dla REST API w rozwoju mobilnym i webowym. Serwer wysyła JSON w treści odpowiedzi, klient — w treści zapytania. Standardowy nagłówek Content-Type dla JSON to application/json.
Nowoczesne REST API używają JSON do przesyłania wszystkich typów danych: od prostych list po złożone zagnieżdżone struktury z relacjami między encjami. Biblioteka kliencka (np. Axios w JavaScript lub Retrofit na Android) automatycznie serializuje i deserializuje JSON, oszczędzając programiście ręcznego parsowania.
Ważną zaletą JSON w REST API jest możliwość częściowego przesyłania danych (partial response) przez parametry zapytania, a także obsługa zagnieżdżonych zasobów bez dodatkowych zapytań do serwera.
Parsowanie JSON na platformach mobilnych jest wykonywane wbudowanymi narzędziami. Android używa bibliotek Gson od Google lub Moshi od Square, iOS — protokołu Codable z JSONDecoder. Każda platforma zapewnia wygodne narzędzia do konwersji JSON na natywne obiekty i odwrotnie.
Na Android popularne jest podejście z użyciem Gson lub Moshi. Wystarczy zdefiniować data class z adnotacjami @SerializedName i wywołać fromJson do deserializacji. Biblioteka automatycznie dopasowuje nazwy pól w JSON do pól klasy.
import com.google.gson.Gson
import com.google.gson.annotations.SerializedName
data class User(
@SerializedName("id") val id: Int,
@SerializedName("name") val name: String,
@SerializedName("email") val email: String
)
fun parseJson(jsonString: String): User {
val gson = Gson()
return gson.fromJson(jsonString, User::class.java)
}
Na iOS używany jest wbudowany protokół Codable z JSONDecoder. Struktura danych jest deklarowana jako struct z protokołem Codable, po czym JSON jest parsowany jedną linią. JSONEncoder wykonuje odwrotną serializację — przekształca obiekt na JSON do wysłania na serwer.
import Foundation
struct User: Codable {
let id: Int
let name: String
let email: String
}
func parseJSON(from data: Data) throws -> User {
let decoder = JSONDecoder()
return try decoder.decode(User.self, from: data)
}
JSON i XML — dwa główne formaty do przesyłania danych strukturalnych. JSON wygrywa prostotą i wydajnością, XML — ścisłością i walidacją. Wybór między nimi zależy od wymagań projektu: dla REST API częściej wybiera się JSON, dla złożonych dokumentów ze schematami — XML.
XML wymaga zamykających tagów dla każdego elementu, co zwiększa rozmiar danych 2-3 razy w porównaniu z JSON. Jednocześnie XML obsługuje przestrzenie nazw, schematy XSD, atrybuty i transformację XSLT, co czyni go potężniejszym dla zadań obiegu dokumentów i integracji systemów korporacyjnych.
| Cecha | JSON | XML |
|---|---|---|
| Składnia | Minimalistyczna, klucz-wartość | Tagowa, otwierające i zamykające tagi |
| Rozmiar danych | Kompaktowy | 2-3 razy większy niż JSON |
| Typy danych | Sześć podstawowych typów | Tylko tekst, typy przez schematy |
| Walidacja | Brak wbudowanej, przez JSON Schema | XSD — ścisła i dojrzała |
| Przestrzenie nazw | Brak | Pełna obsługa namespace |
| Szybkość parsowania | Wysoka | Niższa ze względu na złożoność |
Przykłady demonstrują typowe operacje z JSON w rozwoju mobilnym: parsowanie odpowiedzi API, tworzenie JSON do wysyłki i obsługę zagnieżdżonych struktur. Zrozumienie tych wzorców jest niezbędne dla każdego programisty aplikacji mobilnych.
W JavaScript JSON.stringify przekształca obiekt na string JSON. Drugim argumentem można przekazać tablicę kluczy do selektywnej serializacji lub funkcję zastępującą. Trzeci argument określa wcięcia do formatowania.
interface Order {
id: string;
items: OrderItem[];
total: number;
createdAt: string;
}
const order: Order = {
id: 'ord_001',
items: [{ product: 'phone', quantity: 2 }],
total: 1599.98,
createdAt: '2026-07-03T10:00:00Z'
};
const jsonString = JSON.stringify(order, null, 2);
W Kotlin z biblioteką Moshi zagnieżdżone obiekty JSON są obsługiwane przez zagnieżdżone data classy. Adnotacja @Json wskazuje nazwę pola w JSON, jeśli różni się od nazwy właściwości klasy. Tablice są reprezentowane jako List z typem elementu.
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
data class ApiResponse(
val status: String,
val data: List<Product>,
val pagination: Pagination
)
data class Product(
val id: Int,
val title: String,
val price: Double
)
data class Pagination(
val page: Int,
val total: Int
)
val moshi = Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.build()
JSON Schema — to język opisu struktury dokumentu JSON, analogiczny do XSD dla XML. Za pomocą JSON Schema można określić obowiązkowe pola, typy danych, zakresy wartości, wzorce stringów i zagnieżdżoną strukturę. Walidacja według schematu wykrywa błędy danych przed ich przetworzeniem w aplikacji.
JSON Schema jest szeroko używana w OpenAPI (Swagger) do dokumentowania REST API, w formularzach walidacji danych wejściowych i w testowaniu. Plik schematu sam jest dokumentem JSON, co pozwala na używanie standardowych parserów JSON do jego odczytu. Istnieją walidatory online i biblioteki dla wszystkich popularnych języków programowania.
W rozwoju mobilnym JSON Schema jest używana do walidacji odpowiedzi z serwera na etapie testowania i do sprawdzania plików konfiguracyjnych. Biblioteki takie jak network-validator na Androidzie czy json-schema-validator pozwalają wbudować walidację bezpośrednio w proces rozwoju, zapobiegając błędom na wczesnych etapach.
Często zadawane pytania
JSON obsługuje sześć typów: string (w podwójnych cudzysłowach), liczbę (całkowitą i zmiennoprzecinkową), boolean (true/false), null, obiekt (pary klucz-wartość w {}) i tablicę (listę wartości w []). To wystarcza dla dowolnych struktur danych w aplikacjach.
Nie, standard JSON nie obsługuje komentarzy. Jeśli potrzebujesz komentarzy, użyj JSON5 (rozszerzony JSON) lub dodaj pole z opisem, na przykład “_comment”: “wyjaśnienie”. Niektóre narzędzia, jak VS Code, obsługują komentarze w konfiguracyjnych plikach JSON, ale to niestandardowe rozszerzenie.
JSONB — to binarny format przechowywania JSON w PostgreSQL. W przeciwieństwie do tekstowego JSON, JSONB jest szybciej przetwarzany, obsługuje indeksowanie (indeksy GIN) i gwarantuje unikalność kluczy. Jednocześnie JSONB zajmuje więcej miejsca na dysku z powodu dodanych metadanych.
Użyj JSONLint (jsonlint.com) do szybkiego sprawdzenia, wbudowanego JSON.parse() w JavaScript z try-catch, lub wtyczek IDE. Walidacja obejmuje sprawdzenie poprawności cudzysłowów, zamknięcia nawiasów i zgodności typów. Dla złożonych schematów użyj JSON Schema Validator.
Brak ograniczenia w specyfikacji JSON. W praktyce rozmiar jest ograniczony pamięcią urządzenia i możliwościami parsera. Dla aplikacji mobilnych zaleca się nie przekraczać 1-2 MB na jedną odpowiedź, a dla dużych danych używać paginacji lub przesyłania strumieniowego.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również