Typy JSON v programovacích jazycích

Na co se převede JSON hodnota při čtení do obecných typů (bez vlastní třídy) ve výchozím nastavení. Ověřeno spuštěním 20. 10. 2026: Node.js 25.7.0, Python 3.14.7, PHP 8.4.18, Jackson 2.22.4 (OpenJDK 25.0.1), .NET 10.0.201, Go 1.25.5; serde_json 1.0.154 podle dokumentace.

Autor: Aktualizováno

Přehled

JSONJavaScriptPythonPHPJava (Jackson)C# (System.Text.Json)GoRust (serde_json)
objektObjectdictstdClass; s assoc=true arrayLinkedHashMap; strom ObjectNodeJsonElement (Object); JsonObjectmap[string]anyValue::Object (Map)
poleArraylistarrayArrayList; strom ArrayNodeJsonElement (Array); JsonArray[]anyValue::Array (Vec)
řetězecstringstrstringString; strom TextNodeJsonElement (String); JsonValuestringValue::String
celé číslonumber (double)int, libovolně velkéint; nad PHP_INT_MAX floatInteger, Long, BigIntegerJsonElement (Number): GetInt64(), GetDecimal()…float64; s UseNumber() json.NumberValue::Number (i64, u64)
desetinné číslo, exponentnumber (double)floatfloatDouble; volitelně BigDecimalJsonElement (Number): GetDouble(), GetDecimal()float64Value::Number (f64)
true / falsebooleanboolboolBoolean; strom BooleanNodeJsonElement (True/False); JsonValueboolValue::Bool
nullnullNonenullnull; strom NullNodenullnilValue::Null

Postup a příklady najdeš v související výukové kapitole. Při implementaci ověř také verzi procesoru a primární specifikaci uvedenou pod tabulkou. Všechny referenční tabulky na jedné stránce s filtrem jsou v taháku XML a JSON.

Co se při převodu změní

JSON zná jen šest druhů hodnot a o přesnosti čísel ani o pořadí klíčů nic neříká. Každý jazyk je proto mapuje po svém. Všechny řádky níže jsou výsledek čtení tohoto vstupu:

Vstup
{"obj":{"b":1,"a":2,"10":3,"2":4},"big":12345678901234567890,"exp":1e2,"dup":1,"dup":2}
CoKde se to staneJak tomu předejít
velké celé číslo 12345678901234567890JavaScript vrátí 12345678901234567000, PHP a Go float 1.2345678901234567E+19. Přesně ho přečte Python (int), Jackson (BigInteger), C# přes GetDecimal() (GetInt64() vyhodí InvalidOperationException) a serde_json až do u64::MAX.velká ID posílej jako řetězec; v PHP JSON_BIGINT_AS_STRING, v Go Decoder.UseNumber()
pořadí klíčů b, a, 10, 2JavaScript dá celočíselné klíče dopředu (2, 10, b, a). Go při zápisu mapy klíče seřadí (10, 2, a, b), serde_json bez funkce preserve_order už při čtení. Python, PHP, Jackson a C# pořadí zachovají.na pořadí členů nespoléhej (RFC 8259 § 4); záleží-li na něm, použij pole
celé, nebo desetinné čísloGo čte každé číslo jako float64. Zápis 1e2 je v Pythonu float 100.0 a v Jacksonu Double, i když je hodnota celá.typ urči schématem nebo cílovou třídou, ne podle zápisu čísla
prázdný objekt a číselné klíče v PHPS json_decode(…, true) se {} zapíše zpátky jako [] a {"0":"a","1":"b"} jako ["a","b"]; klíče "10" a "2" se stanou celými čísly.pro data, která zapisuješ zpět, nech výchozí stdClass (ten {} zachová)
duplicitní klíč dupJavaScript, Python, PHP, Go, Jackson a JsonSerializer v C# vrátí poslední hodnotu 2. JsonNode v C# vyhodí ArgumentException až při přístupu k objektu.chybu zapneš v C# volbou AllowDuplicateProperties = false, v Jacksonu STRICT_DUPLICATE_DETECTION
obecný objekt v C#JsonSerializer.Deserialize<object>() vrací JsonElement, ne slovník; také hodnoty v Dictionary<string, object> jsou JsonElement.deserializuj do vlastní třídy, nebo pracuj s JsonNode

Jak se s čísly zachází obecně, popisuje kapitola Čísla v JSON. Čtení a zápis v konkrétním jazyce najdeš v sekci Programování.