Řekl bych, že důvodů může být víc. Gtk a kód Gimpu už teď používají různé součásti v xml, tak proč v tom dělat zmatek přidáním nového jsonu. Druhá věc je, že xml v zipu je imho dnes takový víceméně standard, vezměte si třeba docx, odf, nebo třeba xml z inkscapu, všechno xml.
A on tam bude asi i nějaký technický důvod, co v xml udělat jde a v json ne, ale ten teď neumím zodpovědět.
Osobně jsem nepochopil, v čem je výhoda těch XML atributů, a čím se to liší od dalšího vnořenýho elementu.
Je tam nějaká významová nebo funkční nuance?
<faktura customerId=11>
<položky>...</položky>
<faktura>
vs
<faktura>
<customerId>11</customerId>
<položky>...</položky>
<faktura>
Ne, že by to nebylo (celkem snadno) řešitelné, ale tak nějak se s tím pak blbě dělá.
Proč? Je tam nějakej logickej problém? Nebo je to kvůli dostupným nástrojům?
Je to proto, že XML původně vznikl jako formát pro značkování textu. A v textu je podstatně lepší značkovat takto:
Toto je opravdu <style bold="true" emphasis="true" color="red" author="Big Boss">důležité</style> upozornění!
Než takto:
Toto je opravdu
<style>
<bold>true</bold>
<emphasis>true</>
<color>red</color>
<author>Big Boss</author>
důležité
</style>
upozornění!
Pletete dohromady html a xml, coz jsou zcela nezavisly veci (a vzdycky byly). XML totiz (narozdil od html) byl vzdy strukturovany datovy format a NIKDY to nebyl format pro zanackovani textu.
Rozdil mezi tagem a parametrem je celkej zjevny, v tagu jsou nejaka data, parametr urcuje nejakou vlastnost tech dat. A pokud jde o zobrazovani ... (se kterym to nema zhola nic spolecnyho) tak na to existujou v XML sablony.
Hezkou ukázkou rozdílu jsou data z jedné meteostanice. Ta je umí podávat ve dvojím formátu:
JSON:
{"timestamp":"2026-08-19 19:22:06 +0200","temperature":"25.5","pressure":"994.5824493"}
XML:
<weatherdata timestamp="2026-08-19 19:22:06 +0200">
<temperature type="float" units="Celsius">25.5</temperature>
<pressure type="float" units="hPa">994.5824493</pressure>
</weatherdata>
Zajisté, ten JSON je stručnější - jen musíte vědět, v jakých jednotkách to zrovna pracuje, na co to zrovna někdo na té meteostanici přepnul.
Ano, můžu. Jen ta meteostanice to nedělá. ;D
Já jsem psal, že řešení je vcelku jednoduché. Jenže zároveň tím ztrácíte přehled o struktuře. Z onoho XML je vcelku zřejmé, že jde o záznam teploty a tlaku v určitý okamžik - ten (původní) JSON tomu též odpovídá. Vámi popsaná úprava však ke každému přidává další strukturu jednotka + hodnota.
Jednoduchý parser (třetí typ výstupu z programu k oné meteostanici):
XML:
weatherdata.timestamp="2026-08-19 19:22:06 +0200"
weatherdata.temperature=25.5
weatherdata.temperature.unit="Celsius"
weatherdata.pressure=994.5824493
weatherdata.pressure.unit="hPa"
JSON (jejich, chybí jednotky):
weatherdata.timestamp="2026-08-19 19:22:06 +0200"
weatherdata.temperature=25.5
weatherdata.pressure=994.5824493
JSON (vaše varianta):
weatherdata.timestamp="2026-08-19 19:22:06 +0200"
weatherdata.temperature.value=25.5
weatherdata.temperature.unit="Celsius"
weatherdata.pressure.value=994.5824493
weatherdata.pressure.unit="hPa"
Jasně, všechno je to krásně čitelné a zpracovatelné. Ale ta původní struktura mi je tak nějak sympatičtější.
Výhodou XML je i to, že ta stanice umí udělat HTML stránku čistě XSL transformací, v prohlížeči, bez scriptů - pro zpracování JSON to potřebuje spouštět (jednoduchý) JavaScript.
Pomaly sa parsuje, ale ma "zadarmo" schemy, ktore hned vygeneruju aj struktury v programovacom jazyku. Ma aj standardizovane vyhladavanie pre tych, ktori to nechcu cele parsovat (XPath).
JSON ma tiez schemy, ale tam sa nepresadili, jq je jeden nastroj a nie siroko implementovany standard.
Aj ked je pravda, ze sa od XML ustupuje, stale je za mna viac pouzitelny.
XML je pořád výrazně lepší než JSON. JSON má oproti XML jedinou výhodu – když ho chcete ve velkém editovat ručně (ale nechcete tam dávat poznámky, což je u ruční editace časté).
Nekomprimovaný JSON s obrázkem by pořád byl obrovský.
XML má pro tohle použití jednu obrovskou výhodu – je od začátku navrženo jako rozšiřitelné. Vznikne nový plugin do Gimpu? Vytvoří si nový namespace a může si do XML ukládat svá data kam potřebuje. Tohle s JSONem nejde, tam si musí rozšiřitelnost každý nějak vymyslet po svém. Navíc XML má lepší možnosti definice schématu, můžete třeba předepsat, že důležité informace potřebné pro rychlé zobrazení musí být na začátku.
Navíc v grafickém editoru asi bude docela důležité ukládání čísel, přičemž JSON vůbec neřeší, že jsou různé reprezentace čísel v aplikacích. Je číslo v JSONu 32bitové celé číslo? Se znaménkem nebo bez? Nebo je 64bitové? Nebo je 32bitové nebo 64bitové v plovoucí řádové čárce? Nebo něco jiného?
Jenže XML vůbec nepředstírá, že přenáší čísla. XML přenáší jenom text, jako číslo ho můžete interpretovat. A při té interpretaci většinu lidí napadne ptát se, co je to za číslo. A obvykle to najdou ve schématu.
JSON se tváří, že přenáší číslo, schéma se ve spoustě případů neřeší, vždyť typy jsou přece přímo v JSONu. A pak se částka uloží do JSONu jako číslo a interpretuje se jako float nebo double…
CBOR je binarni. To ma plusy i minusy. Tedy to neni rozhodne nahrada za json/xml. I kdyz json i xml se pouzivaji kde by se CBOR hodil vice. Ty "stringy" na presun dat se rozsirili, protoze autorum, a tem co to po nich udrzuji, umoznuji kouknout co to vlastne posilaji/prijimaji. Taky ten string ma (bohuzel) nejvetsi vyjadrovaci schopnost a halvne rozsiritelnost.
Ano, je binární, ale nese si svoji strukturu (narozdíl od ASN.1 nebo protobuf) a umí i sémantické tagy (narozdíl od MessagePacku). Je standardizovaný a rozšiřitelný včetně správy pod IANA - https://www.iana.org/assignments/cbor-tags). Má podporu pro schémata v CDDL.
> I kdyz json i xml se pouzivaji kde by se CBOR hodil vice.
No právě.
> Ty "stringy" na presun dat se rozsirili, protoze autorum, a tem co to po nich udrzuji, umoznuji kouknout co to vlastne posilaji/prijimaji.
Pro debugging se dá jednoduše převést do textové formy (jedna je standardizovaná [1], ale jednodušší věci jdou i přímo do jsonu).
[1] Diagnostic notation - https://www.rfc-editor.org/rfc/rfc8949.html#name-diagnostic-notation
Ale pochopitelně vím jak je to se setrvačností a komunitním vývojem. Takže si nedělám iluze o masivním rozšíření.
nevim, budu muset podrobne prozkoumat.
Ja mam problem ze potrebuju ukladat ruzna data, ktera si pak potrebuji prohlizet lidi, a pripadne je potrebuji lehce upravovat, nebo z toho neco zkopirovat, nebo nahradit. A dost casto se mi objevuji i matice (ne pouhe vektory), kde clovek potrebuje zmenit jedno dve cisla, pripadne z jinych mereni a formatu prepsat matici 3x4 a pod. Vetsina formatu s maticema nepocita a testy na uzivatelich dopadly spatne, json je nevhodny, yaml taky, xml katastrofa, lidi v tom delaji chyby a pak neco nefunguje. Muzu dodelavat ruzna GUI aby to tam lidi nastrkali spravne, ale to je pruda. Takze pouzivam nejaky upraveny vlastni neco jako ini, ale je to domaci reseni a rad bych neco obecne prijimaneho.
Komprimace u XML me prijde jako nevyhoda.
Dala by se pochopit, kdyby to bylo z duvodu "kontejneru", ze k xml pridate bloby a obrazky.
Ale neskutecne to stezuje vyhledavani v souborech.. pro stare .doc mi staci hledat (napr. pres total commander, ale lze to aplikovat i pro strings, grep) textovy retezec v unicode formatu.. pro docx musite mit predem naindexovany vsechno - anebo porad rozbalovat cely kontejner :/
Tak zrovna na ukládání dat vhodnější rozhodně není. Vhodnější je pro interoperabilitu. Parsovat XML je náročnější ale nemyslím, že by to tady byl problém. A JSON se rozhodně neprosadil proto, že "javascript v prehlidacoch nic ine nevie" ale proto, že to bylo praktické. S touhle logikou by se XML neprosadil víceméně nikde -- a přece se prosadil. Protože obojí má své výhody i nevýhody.
"ale proto, že to bylo praktické."
Nikoli, prosadil se proto, ze to pisou patlalove, kteri o tom co pisou vubec nic nevedi a XML je prece "silene slozite". A jakmile to pak ma nekdo nekdy udrzovat, je jednodussi to napsat cely znova. Protoze kdyz do jsonu neco pridam, tak tim narozdil od xml rozbiju uplne vsechno.
A to je presne ten duvod proc je naopak XML ten vhodny format, protoze kdyz rekneme napisu prohlizec, a nekdo si vymysli ze do formatu prida nejakou novou vlastnost, tak ten prohlizec bude dal fungovat, jen nebude chapat tu novou vlastnost.
Viz treba epub. Chces indexovat nazvy a autory? Neni nic snazsiho ...
Parsovat XML je náročnější
Než JSON? V čem?
A JSON se rozhodně neprosadil proto, že "javascript v prehlidacoch nic ine nevie" ale proto, že to bylo praktické.
Ale JSON se prosadil proto, že v prohlížečích se na to zavolal eval() a data byla rovnou v paměti v nativních strukturách JavaScriptu. Zpočátku to byl vyloženě kód, který vytvořil proměnnou. Pak se řeklo, že se tomu dají nějaká omezení, aby se tam nemohl spouštět úplně libovolný kód, a pojmenování se ponechá na tom, kdo data načítá – ale pořád to šlo řešit pomocí eval(). Tak vznikl JSON. Nakonec se přišlo na to, že parsovat data pomocí eval() není zrovna bezpečné a do prohlížečů se doplnily funkce pro jeho parsování.
Ve skutečnosti uměly s XML prohlížeče pracovat daleko dřív, než měly nativní podporu JSONu. Ale použití JSONu bylo v prohlížeči daleko jednodušší.
> "Parsovat XML je náročnější"
> Než JSON? V čem?
Parsovat XML správně je o mnoho náročnější. Namespaces, CDATA atd. Napsat plně funkční a validní XML parser vlastně ani nejde, protože existují šedá místa (třeba XML v CDATA bloku v XML), která se nedají vždy interpretovat jednoznačně.
JSON je primitivní formát se všemi výhodami a nevýhodami z toho plynoucími.
A to ještě stále uvažujeme základní parsování bez kontroly pomocí DTD. Tj. stáhnout DTD, naparsovat DTD, pak parsovat ten vlastní XML dokument a u toho ho kontrolovat pomocí toho naparsovaného DTD.
Takhle se to ale v praxi často nedělá, pokud to není přímo zadání dané utility. Ale rozhodně to není žádná "blbost, aby Milan ukázal zbytečnou složitost" - např. je to důležité při porovnávání dvou XML souborů. Představme si příklad, kdy se dva XML soubory liší jen prohozením pořadí dvou tagů aa a bb (viz níže). Pokud by to byl zápis dokumentu ala HTML, tak jsou rozdílné, ale pokud by to byl XML soubor popisující atributy něčeho (jako JSON), tak jsou naprosto shodné. A to se, alespoň podle specifikace, program dočte až v DTD, kde jsou uvedena právě všechna ta složitější pravidla nad základní parsování, jako např. kde záleží na pořadí, jestli smí být tag uvedený vícekráte apod.
V GIMPu samozřejmě nečekám kontrolu pomocí DTD, protože tam kontrola proběhne tou vlastní importní rutinou. Ale jen pro zajímavost o XML.
<parent>
<aa>Nazdar</aa>
<bb>světe</bb>
</parent>
19. 8. 2026, 14:00 editováno autorem komentáře
Tak zakladni pravidlo je, ze elementy jsou v poradi (vektor), atributy nejsou v poradi (asociativni pole).
Ze mate use-case, ktery to uklada spatne, nebo vnasi dalsi zobecnujici chovani, neni problem XML.
Pokud jste chteli argumentovat prohoditelnosti, tak mozna vhodnejsi priklad by byl:
<b><i>text</i></b> vs <i><b>text</b></i>
A to ještě stále uvažujeme základní parsování bez kontroly pomocí DTD.
Jenže tu potřebujete jen ve specifických případech. V případě JSONu nemáte definované ani co se má stát, když jsou v mapě duplicitní klíče. Nebo v JSONu máte sice čísla, ale nikde není řečeno, jak se mají interpretovat.
Pokud se bavíme o situaci, kdy si vybírám formát XML nebo JSON tak, jak se běžně používají, není podle mne XML parser o nic složitější, než JSON. Jestli dokonce nebude XML parser jednodušší.
Namespace a CDATA nejsou nic komplikovaného.
existují šedá místa (třeba XML v CDATA bloku v XML)
CDATA začíná <![CDATA[, uvnitř nesmí obsahovat posloupnost ]]> a jsou zakončené právě sekvencí znaků ]]>. Jinak je text uvnitř pouze posloupnost znaků. Klidně tam můžete mít něco, co vypadá jako XML – ale budou to jen znaky menšítko, písmena a většítko.
JSON je primitivní formát se všemi výhodami a nevýhodami z toho plynoucími.
Parser JSONu musí řešit duplicitní klíče v mapě, escapování znaků – nemyslím si, že by byl jednodušší než XML parser.
> Parser JSONu musí řešit duplicitní klíče v mapě, escapování znaků – nemyslím si, že by byl jednodušší než XML parser.
Určitě jednodušší je, jen není přesně specifikované, co přesně JSON je, takže různé knihovny dojdou k různým výsledkům.
Nicméně u XML je to podobné. Třeba atributy mají být unikátní, což splním, když totéž napíši různými code pointy. Ale některé knihovny toto nepovolují a řeknou, že atribut je duplicitní.
Další nevýhoda XML je, že těch standardů je hodně. Jeden pro XML. Další pro namespace. Jiný pro schéma.
když totéž napíši různými code pointy.
To je ovšem záležitost Unicode a na to samé narazíte u JSONu i jiných formátů, které mohou používat Unicode.
Další nevýhoda XML je, že těch standardů je hodně. Jeden pro XML. Další pro namespace. Jiný pro schéma.
Ty standardy jsou dva – XML a namespaces. Schéma je vedle a nemusíte ho řešit, stejně jako je vedle a nemusíte ho řešit u JSONu.
Pokud to vnitřní XML obsahuje ]]>, tak řešíte jak to tam dostat.
JSON nemusí řešit identitu tagů (namespace s odkazem na dtd a to i několikrát s různými prefixy v různých částech dokumentu).
Duplicitní tagy, atributy atd řeší i XML. Ten formát je prostě mnohem složitější.
JSON sice navíc řeší (blbě) čísla, ale to je fakt trivialita na úrovni lexeru.
Pokud to vnitřní XML obsahuje ]]>, tak řešíte jak to tam dostat.
Ano, ale parsování je jednoznačné, není to žádné šedé místo. A řešení je jednoduché – ukončíte sekci CDATA, zapíšete tři znaky, otevřete sekci CDATA.
JSON nemusí řešit identitu tagů (namespace s odkazem na dtd a to i několikrát s různými prefixy v různých částech dokumentu).
DTD se dnes běžně nepoužívá. Tečka.
Duplicitní tagy, atributy atd řeší i XML.
Ano, ale má to jednoznačně vyřešené. Zdroj se buď jednoznačně rozparsuje, nebo parsování skončí chybou. A výstup všech parserů odpovídajících standardu bude stejný.
Ten formát je prostě mnohem složitější.
„Prostě“ není argument. Formát možná je složitější, ale to neznamená, že je složitější parser.
JSON sice navíc řeší (blbě) čísla, ale to je fakt trivialita na úrovni lexeru.
Ne, ten problém je na úrovni interpretace. Specifikace je napsaná tak, jako kdyby to bylo číslo s libovolnou přesností. Jenže JavaScript, ze kterého JSON vychází, má číslo jako 64bitové číslo v plovoucí řádové čárce. Takže JSON ve skutečnosti není ani podmnožina JavaScriptu, i když se tak tváří a vznikl tak.
S tymi cislami v JSOn-e je to este horsie, polovica parserov pocita ze su to 64-bitove cisla s destainou ciarkou, ale nesparsuju vsteky taketo cisla. Lebo JSOn mal v definici takeho mackopsa, co ma niektore vlastnosti 32-bitoveho int a niektore 64-bitoveho double.
Ked sa do toho pripletie 64-bitovy int tak uz ma problem.
Je to minove pole https://seriot.ch/security/parsing_json.html