Na JSON se rozhodně dá nahlížet jako na strom. Pole a objekty jsou uzly, z nichž vedou vazby na uzly, které reprezentují vnořené hodnoty. Všechny ostatní typy (čísla, řetězce, booleany a nully) jsou pak koncové uzly.
Spousta knihoven pro manipulaci s JSON dokumenty tuto reprezentaci poskytuje, viz třeba JsonNode v System.Text.Json.
Ale holt stejně jako ne každý řetězec je platný JSON text, tak ne každý strom je platný JSON dokument.
To že použivate knižnicu ktorá vám parsuje JSON do AST a AST vie previesť na text(JSON), rozhodne neznamená že JSON je stom. Stom používate len ako rozhranie medzi vyššie spomenutou knižnicou a vaším kódom. Pritom ten parser/serializer je možné napísať aj tak že bude priamo validovať a mapovať na dátové typy. Potom na AST ani nenarazíte.
Libovolný platný JSON text lze interpretovat jako strom, tak jak jsem to popsal výše.
A tato interpretace je poměrně přirozená, proto je v nějaké formě dostupná prakticky v každé JSON knihovně.
Navíc je to přirozená interpretace i pro asociované technologie, jako třeba JSONPath. Výrazy v JSONPath jsou vlastně jenom instrukce, jak procházet strom nějakého JSON dokumentu. Nebo jq - velká část jq jazyka jsou taktéž jenom instrukce pro procházení stromu nějakého JSON dokumentu. Vizualizace JSON dokumentů (zrovna mě napadá třeba ve Firefoxu) jsou často ve formě stromu.
Stejně tak je to přirozená interpretace i pro člověka, viz třeba právě ten úvod v RFC 8259.
> Pritom ten parser/serializer je možné napísať aj tak že bude priamo validovať a mapovať na dátové typy.
To určitě. Ale ty datové typy, na které to mapuje, budou s největší pravděpodobností také tvořit strom.
Strom je špecifický typ grafu. Graf je dvojica množín (V, E), kde V je množina vrcholov a E je množina hrán (dvojíc vrcholov).
Triviálne prípady grafov - s prázdnou množinou vrcholov; s jednoprvkovou množinou vrcholov - sú stále platné grafy.
Stromová interpretácia JSONu "null" je jednoprvkový strom s koreňom null.