Christian S.: Valides JSON?

Hi,

habe gerade mal geschaut, wie valides JSON aussieht:

http://simonwillison.net/2006/Oct/11/json/

Auf http://www.json.org steht außerdem, dass nur einfache Datentypen wie Array, Objekt, String, Number erlaubt sind.

Schau ich mir aber gängige Programmierstile an, z.B. in größeren JS-Frameworks, wird eigentlich immer so was geschrieben:

var obj =
{
   method: function()
   {

}
};

Ist das nun ungültig? Da ein ungültiger Typ zugewiesen wird, und das method nicht in Anführungszeichen steht?

Kann man demnach auch RegExp Literale oder Date Objekte zuweisen?

var obj =
{
   myReg: /test/,
   myDate: new Date()
}

Hat JSON doch nicht so viel mit JavaScript zu tun wie es scheint? Scheinbar ist es (inzwischen?) ein Datenaustauschformat, von vielen Sprachen genutzt werden kann.

Gruß
Christian

  1. Schau ich mir aber gängige Programmierstile an, z.B. in größeren JS-Frameworks, wird eigentlich immer so was geschrieben:

    Kann man demnach auch RegExp-Literale oder Date-Objekte zuweisen?

    Das hängt von der Funktion ab, die aus Variablen JSON-Daten bastelt.

    Hat JSON doch nicht so viel mit JavaScript zu tun wie es scheint? Scheinbar ist es (inzwischen?) ein Datenaustauschformat, von vielen Sprachen genutzt werden kann.

    JSON war schon immer ein Datenaustauschformat, mit dem Javascript auf Browser-Seite mit einer beliebigen anderen Sprache auf Server-Seite kommuniziert.

    1. Hi,

      JSON war schon immer ein Datenaustauschformat, mit dem Javascript auf Browser-Seite mit einer beliebigen anderen Sprache auf Server-Seite kommuniziert.

      Ja, aber wieso kann man dann nicht auch JavaScript Objekte als Wert angeben, also z.B.

      {a: new Date()}

      Laut json.org ist das ungültig. Auch anderswo überlegen Leute wie man ein Date Objekt über JSON nach JavaScript bringt. (und zwar z.B. als String in einem bestimmten Format).

      Oder eben Funktionen als Wert.

      Gruß!

      1. Moin!

        JSON war schon immer ein Datenaustauschformat, mit dem Javascript auf Browser-Seite mit einer beliebigen anderen Sprache auf Server-Seite kommuniziert.

        Ja, aber wieso kann man dann nicht auch JavaScript Objekte als Wert angeben, also z.B.

        {a: new Date()}

        Weil JSON ein Datenaustauschformat ist und alle Informationen über die Daten vollständig im JSON-String enthalten sein müssen.

        Wäre dein Vorschlag erlaubt, würde das bedeuten, dass eine vollständige Javascript-Engine inklusive der relevanten Objekte (mutmaßlich auch DOM) implementiert werden müßte. Schonmal PHP mit Javascript-Engine serverseitig gesehen?

        Wenn definiert ist, dass der Datenfluß ausschließlich immer vom Server, der irgendwas zusammenbastelt, hin zu einem javascriptfähigen Webbrowser führt, kann man selbstverständlich Javascript-Codeschnipsel generieren und im Browser ausführen lassen. Das ist dann aber kein JSON mehr, auch wenn es eventuell so ähnlich aussieht. Es verliert durch die Einbettung von Javsscript-Code seine universelle Nutzbarkeit.

        - Sven Rautenberg

        --
        "Love your nation - respect the others."
        1. Hi,

          Wenn definiert ist, dass der Datenfluß ausschließlich immer vom Server, der irgendwas zusammenbastelt, hin zu einem javascriptfähigen Webbrowser führt, kann man selbstverständlich Javascript-Codeschnipsel generieren und im Browser ausführen lassen. Das ist dann aber kein JSON mehr, auch wenn es eventuell so ähnlich aussieht. Es verliert durch die Einbettung von Javsscript-Code seine universelle Nutzbarkeit.

          Das bedeutet, dass, wenn ich im JavaScript schreibe

          var obj =
          {
             method: function()
             {
             }
          };

          ist das gar kein JSON??

          Da PHP z.B. nichts damit anfangen kann. Aber dennoch ist es ja gültiger JavaScript Code?

          Gruß!

          1. hallo again Christian,

            Das bedeutet, dass, wenn ich im JavaScript schreibe

            var obj =
            {
               method: function()
               {
               }
            };

            ist das gar kein JSON??

            richtig - dies ist die JavaScript schon immer zueigene
            objektliteralnotation - eine *abkuerzung*, um nicht
            den umstaendlicheren weg ueber »new KonstruktorFunktion«
            beschreiten zu muessen.

            Da PHP z.B. nichts damit anfangen kann.

            exakt:

            • objektliteralnotation ist nicht zwangslaeufig »JSON«-konform.

            Aber dennoch ist es ja gültiger JavaScript Code?

            was denn sonst?

            • »JSON«-konform notierte objektsysteme genuegen zwangslaeufig
                den anforderungen an gueltige JavaScript-syntax.

            so long - peterS. - pseliger@gmx.net

            --
            »Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
            Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - Douglas Crockford
            ie:( fl:) br:> va:( ls:& fo:) rl:) n3;} n4:} ss:} de:µ js:} mo:? zu:]
  2. Schau ich mir aber gängige Programmierstile an, z.B. in größeren JS-Frameworks, wird eigentlich immer so was geschrieben:

    var obj =
    {
       method: function()
       {

    }
    };

    Das ist dann kein JSON Objekt oder die Funktion wird ausgeführt und gibt ein gültiges Format zurück.

    Ist das nun ungültig? Da ein ungültiger Typ zugewiesen wird, und das method nicht in Anführungszeichen steht?

    Der Schlüssel muss nicht in Anführungszeichen stehen.

    Kann man demnach auch RegExp Literale oder Date Objekte zuweisen?

    Nein.

    Hat JSON doch nicht so viel mit JavaScript zu tun wie es scheint? Scheinbar ist es (inzwischen?) ein Datenaustauschformat, von vielen Sprachen genutzt werden kann.

    Genau dazu ist JSON gedacht.

    Struppi.

    1. Hi,

      Das ist dann kein JSON Objekt oder die Funktion wird ausgeführt und gibt ein gültiges Format zurück.

      Nein, zunächst wird nur die Funktionsreferenz zugewiesen. Und außerdem könnte die Funktion ja auch einen komplexen Typ zurückgeben.

      Der Schlüssel muss nicht in Anführungszeichen stehen.

      So steht es aber auf dieser einen Seite...

      Kann man demnach auch RegExp Literale oder Date Objekte zuweisen?

      Nein.

      Hast du auch eine Begründung?

      Funktionsobjekte weist ja auch jeder zu...

      Gruß!

      1. Das ist dann kein JSON Objekt oder die Funktion wird ausgeführt und gibt ein gültiges Format zurück.

        Nein, zunächst wird nur die Funktionsreferenz zugewiesen. Und außerdem könnte die Funktion ja auch einen komplexen Typ zurückgeben.

        Dann wäre es kein JSON format.

        Der Schlüssel muss nicht in Anführungszeichen stehen.

        So steht es aber auf dieser einen Seite...

        Richtig, da hab ich die spezifikationen nicht richtig gelesen.

        Kann man demnach auch RegExp Literale oder Date Objekte zuweisen?

        Nein.

        Hast du auch eine Begründung?

        Es ist keine Objekt, Array, String, Zahl oder boolescher Wert

        Funktionsobjekte weist ja auch jeder zu...

        Aber nicht in JSON Objekte, das sind einfach JS Objekte, da kann man das machen. Du nutzt aber JSON nur zum austausch zwischen verschiedenen Sprachen.

        Struppi.

        1. gruss Christian,

          kurz und knapp:

          Du laesst Dich offensichtlich von der aehnlichkeit zwischen der
          mittlerweile gaengigen (objekt-)literal-notation in JavaScript
          und der per definition aus gutem grund limitierten ausdrucksmoeglichkeit
          der »JavaScript Object Notation« - kurz »JSON« - verwirren.

          darueberhinaus erweckt es den anschein, dass Du die von Dir
          selbst verlinkten stellen nur fluechtig gelesen oder nicht
          richtig verstanden hast:

          http://simonwillison.net/2006/Oct/11/json/ - zweiter absatz:

          » JSON isn’t just the object - literal syntax of JavaScript;
            it’s a very tightly defined subset of that syntax. The site
            has a spec (illustrated with pretty state machine diagrams)
            and there’s an RFC as well.«

          weiterhin verlinkt dieser absatz das diskussionspapier zum
          spezifikationsprozess, welches verstaendlich formuliert
          daherkommt.

          mehr:

          http://www.json.org/json-de.html - erster absatz:

          » JSON (JavaScript Object Notation) ist ein schlankes Datenaustauschformat,
            das für Menschen einfach zu lesen und zu schreiben und für Maschinen
            einfach zu parsen (Analysieren von Datenstrukturen) und zu generieren ist.
            Es basierd auf einer Untermenge der JavaScript Programmiersprache,
            Standard ECMA-262 dritte Edition - Dezember 1999.«

          die naechsten absaetze und das bildschema erklaeren praezise
          eine spezifikationskonforme anwendung.

          was ist Dir noch unklar?

          in diesem sinne - »Lesen!«, »Lesen!«.

          so long - peterS. - pseliger@gmx.net

          --
          »Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
          Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - Douglas Crockford
          ie:( fl:) br:> va:( ls:& fo:) rl:) n3;} n4:} ss:} de:µ js:} mo:? zu:]