Vlákno názorů k článku Manipulace se strukturovanými daty: sémantická manipulace s JSON dokumenty od pstpst - Autor o RFC 8259: Úvod dokonce definuje abstraktní...

  • Článek je starý, nové názory již nelze přidávat.
  • 8. 1. 2025 15:25

    pstpst

    Autor o RFC 8259: Úvod dokonce definuje abstraktní představu JSON dokumentu, aniž by kdekoliv zmínil textovou reprezentaci.

    První věta úvodu RFC 8259: JavaScript Object Notation (JSON) is a text format for the serialization of structured data.

    RFC 8259 nerozlišuje JSON a JSON text, jak autor tvrdí. Ani nemůže, protože JSON je textový formát pro reprezentaci datových struktur JavaScriptu. Takže to první je JSON dokument a to druhé je obrázek datových struktur, které ten JSON dokument reprezentuje.

  • 9. 1. 2025 13:23

    zdenek-biberle

    V tom úvodu RFC 8259 mi jde hlavně o to, že je tam část, která popisuje sémantiku JSON dokumentů, ne gramatiku.

    Např. an object is an unordered collection of zero or more name/value pairs popisuje jakýsi mentální model, jak na objekt nahlížet. Neříká nic o složených závorkách, uvozovkách a dvojtečkách.

    Pro text, který ta gramatika v RFC 8259 popisuje, pak RFC 8259 konzistentně používá termín JSON text.

    Definice gramatiky JSON textu pak dost často mluví o reprezentaci, viz třeba tyto věty:

    • An object structure is represented as a pair of curly brackets surrounding zero or more name/value pairs (or members).
    • An array structure is represented as square brackets surrounding zero or more values (or elements).
    • The representation of numbers is similar to that used in most programming languages.
    • The representation of strings is similar to conventions used in the C family of programming languages.

    Tj. gramatika JSON textu se odkazuje na koncepty, které se zabývají sémantikou JSON dokumentů. A tím dává té textové reprezentaci nějaký význam.

    Např. "a" je sekvence tří znaků (či Unicode codepointů, pokud chceme být trochu přesnější), která odpovídá gramatice JSON textu. Ale zároveň je to reprezentace řetězce s jedním znakem "a". Na druhou stranu "\u0061" je sice jiný JSON text, ale také je to reprezentace řetězce s jedním znakem "a".

    To znamená, že reprezentovaná hodnota (nějaký JSON dokument) a její reprezentace (nějaký JSON text) jsou koncepčně odlišné věci. A RFC 8259 to zcela chápe a vskutku tyto dva koncepty rozlišuje.

    Nutno poznamenat, že tyto koncepty nejsou příliš striktně pojmenované. Takže když někdo řekne "JSON", tak není úplně jasné, který z nich má na mysli. Možná má na mysli soubor plný JSON textu. A nebo možná má na mysli reprezentaci nějakého JSON dokumentu někde v paměti svého programu.

    A nakonec ještě jedna drobnost:

    JSON je textový formát pro reprezentaci datových struktur JavaScriptu.

    To není tak úplně pravda. JSON je inspirovaný JavaScriptem a gramatikou některých jeho výrazů, ale JSON není schopný reprezentovat některé JavaScriptové hodnoty. Např. některá čísla (NaN, nekonečno, záporné nekonečno), funkce, či pole objektů pojmenované pomocí symbolů.

  • 9. 1. 2025 16:04

    pstpst

    Vždyť to je už v názvu. Notation je notace aneb zápis. Neexistuje JSON dokument bez dokumentu. Existují nějaká data, která lze uložit do formátu JSON a až když je do něj uložíte, stane se z nich JSON.

    První věta RFC 8259: JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format.

    První věta definice JSON v ECMA 404 (na kterou se RFC 8259 odkazuje): JSON is a text syntax that facilitates structured data interchange between all programming languages.

    Ohledně sémantiky je ECMA 404 zcela explicitní:

    The goal of this specification is only to define the syntax of valid JSON texts. Its intent is not to provide any semantics or interpretation of text conforming to that syntax.

  • 9. 1. 2025 13:43

    Jinrys

    "JSON je textový formát pro reprezentaci datových struktur JavaScriptu"

    Je to tak. Mimochodem, Javascript (ECMAscript) od doby vytvoření JSON specifikace pokročil, např. už skoro 15 let lze zapsat čísla hexadecimálně, můžou začínat desetinou tečkou apod. Toto reflektuje JSON5, který dané vlastnosti přidává ke standartnímu JSONu. https://json5.org/