JSON (JavaScript Object Notation) — je lehký textový formát pro výměnu dat, založený na syntaxi objektů JavaScript. Používá se všude: od REST API a konfiguračních souborů po ukládání dat v databázích a mobilních aplikacích. Podle oficiálního webu JSON je formát nezávislý na programovacím jazyce a je podporován prakticky všemi moderními platformami. JSON se stal de facto standardem pro přenos dat mezi klientem a serverem.
Hlavní body
JSON — je textový formát pro reprezentaci strukturovaných dat, založený na syntaxi JavaScript. Navzdory původu z JavaScriptu je formát zcela nezávislý na jazyce — existují parsery a serializátory pro všechny populární programovací jazyky.
Historie JSON začala na počátku 21. století, když Douglas Crockford oddělil podmnožinu syntaxe JavaScript pro výměnu dat. V roce 2013 byl formát standardizován jako ECMA-404 a později jako ISO/IEC 21778:2017. Název znamená JavaScript Object Notation.
Hlavní výhodou JSON je minimalistická syntaxe. Pro popis dat se používá pouze šest typů: string, číslo, boolean, null, pole a objekt. To stačí pro reprezentaci jakýchkoli datových struktur používaných v aplikacích.
Syntaxe JSON je velmi jednoduchá: data jsou reprezentována jako páry klíč-hodnota, kde klíč je string v uvozovkách a hodnota je jedním ze šesti základních typů. Objekty jsou uzavřeny ve složených závorkách, pole v hranatých. Stringy povinně používají dvojité uvozovky, jednoduché uvozovky nejsou povoleny.
Čísla v JSON mohou být celá nebo s plovoucí desetinnou čárkou, kladná nebo záporná, s exponenciálním zápisem. Logické hodnoty jsou reprezentovány true a false a absence hodnoty null. Pole obsahují uspořádanou množinu hodnot libovolného typu, včetně vnořených polí a objektů.
{
"name": "JSON",
"type": "text",
"version": 2024,
"flexible": true,
"extensions": null,
"languages": [
"JavaScript",
"Python",
"Java"
],
"nested": {
"info": "podpora vnořování"
}
}
| Typ | Příklad | Popis |
|---|---|---|
| String | „text“ |
V uvozovkách, s escape sekvencemi |
| Číslo | 42 |
Celé, s plovoucí čárkou, exponenciální |
| Boolean | true |
true nebo false — bez uvozovek |
| null | null |
Absence hodnoty |
| Objekt | {} |
Neuspořádaná množina párů klíč-hodnota |
| Pole | [] |
Uspořádaný seznam hodnot |
JSON je hlavní formát výměny dat pro REST API v mobilním a webovém vývoji. Server posílá JSON v těle odpovědi, klient — v těle požadavku. Standardní hlavička Content-Type pro JSON je application/json.
Moderní REST API používají JSON pro přenos všech typů dat: od jednoduchých seznamů po složité vnořené struktury se vztahy mezi entitami. Klientská knihovna (např. Axios v JavaScriptu nebo Retrofit na Androidu) automaticky serializuje a deserializuje JSON, čímž zbavuje vývojáře ručního parsování.
Důležitou výhodou JSON v REST API je možnost částečného přenosu dat (partial response) pomocí parametrů požadavku, stejně jako podpora vnořených zdrojů bez dalších požadavků na server.
Parsování JSON na mobilních platformách se provádí vestavěnými nástroji. Android používá knihovny Gson od Googlu nebo Moshi od Square, iOS — protokol Codable s JSONDecoder. Každá platforma poskytuje pohodlné nástroje pro převod JSON do nativních objektů a zpět.
Na Androidu je populární přístup s Gson nebo Moshi. Stačí definovat data class s anotacemi @SerializedName a zavolat fromJson pro deserializaci. Knihovna automaticky přiřazuje názvy polí v JSON k polím třídy.
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 se používá vestavěný protokol Codable s JSONDecoder. Struktura dat je deklarována jako struct s protokolem Codable, poté je JSON parsován jedním řádkem. JSONEncoder provádí reverzní serializaci — převádí objekt na JSON pro odeslání na server.
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 a XML — dva hlavní formáty pro přenos strukturovaných dat. JSON vítězí v jednoduchosti a výkonu, XML v přesnosti a validaci. Volba mezi nimi závisí na požadavcích projektu: pro REST API se častěji volí JSON, pro složité dokumenty se schématy — XML.
XML vyžaduje uzavírací tagy pro každý prvek, což zvyšuje velikost dat 2-3krát ve srovnání s JSON. Zároveň XML podporuje jmenné prostory, schémata XSD, atributy a transformaci XSLT, což jej činí výkonnějším pro úkoly toku dokumentů a integrace podnikových systémů.
| Vlastnost | JSON | XML |
|---|---|---|
| Syntaxe | Minimalistická, klíč-hodnota | Tagová, otevírací a zavírací tagy |
| Velikost dat | Kompaktní | 2-3krát větší než JSON |
| Datové typy | Šest základních typů | Pouze text, typy přes schémata |
| Validace | Žádná vestavěná, přes JSON Schema | XSD — přísná a vyspělá |
| Jmenné prostory | Ne | Plná podpora namespace |
| Rychlost parsování | Vysoká | Nižší kvůli složitosti |
Příklady demonstrují typické operace s JSON v mobilním vývoji: parsování API odpovědí, vytváření JSON pro odeslání a zpracování vnořených struktur. Porozumění těmto vzorům je nezbytné pro každého vývojáře mobilních aplikací.
V JavaScriptu JSON.stringify převádí objekt na JSON řetězec. Druhým argumentem lze předat pole klíčů pro selektivní serializaci nebo náhradní funkci. Třetí argument nastavuje odsazení pro formátování.
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);
V Kotlinu s knihovnou Moshi jsou vnořené JSON objekty zpracovávány prostřednictvím vnořených data class. Anotace @Json označuje název pole v JSON, pokud se liší od názvu vlastnosti třídy. Pole jsou reprezentována jako List s typem prvku.
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 — je jazyk pro popis struktury dokumentu JSON, analogický XSD pro XML. Pomocí JSON Schema lze nastavit povinná pole, datové typy, rozsahy hodnot, vzory řetězců a vnořenou strukturu. Validace podle schématu odhaluje chyby dat před jejich zpracováním v aplikaci.
JSON Schema je široce používána v OpenAPI (Swagger) pro dokumentaci REST API, ve formulářích pro validaci vstupních dat a v testování. Soubor schématu je sám o sobě JSON dokumentem, což umožňuje použití standardních JSON parserů pro jeho čtení. Existují online validátory a knihovny pro všechny populární programovací jazyky.
V mobilním vývoji se JSON Schema používá pro validaci odpovědí serveru ve fázi testování a pro kontrolu konfiguračních souborů. Knihovny jako network-validator na Androidu a json-schema-validator umožňují zabudovat validaci přímo do vývojového procesu, čímž předcházejí chybám v raných fázích.
Často kladené otázky
JSON podporuje šest typů: string (v uvozovkách), číslo (celé a s plovoucí čárkou), boolean (true/false), null, objekt (páry klíč-hodnota v {}) a pole (seznam hodnot v []). To stačí pro libovolné datové struktury v aplikacích.
Ne, standard JSON nepodporuje komentáře. Pokud potřebujete komentáře, použijte JSON5 (rozšířený JSON) nebo přidejte pole s popisem, například „_comment„: „vysvětlení„. Některé nástroje, jako VS Code, podporují komentáře v konfiguračních JSON souborech, ale toto je nestandardní rozšíření.
JSONB — je binární formát ukládání JSON v PostgreSQL. Na rozdíl od textového JSON je JSONB zpracováván rychleji, podporuje indexování (GIN indexy) a zaručuje jedinečnost klíčů. Zároveň JSONB zabírá více místa na disku kvůli přidaným metadatům.
Použijte JSONLint (jsonlint.com) pro rychlou kontrolu, vestavěný JSON.parse() v JavaScriptu s try-catch nebo IDE pluginy. Validace zahrnuje kontrolu správnosti uvozovek, uzavírání závorek a shody typů. Pro složitá schémata použijte JSON Schema Validator.
Neexistuje žádné omezení ve specifikaci JSON. V praxi je velikost omezena pamětí zařízení a možnostmi parseru. Pro mobilní aplikace se doporučuje nepřekračovat 1-2 MB na jednu odpověď a pro velká data používat stránkování nebo streamování.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také