Valides JSON?
Christian S.
- javascript
0 Engelein0 Struppi
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
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.
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ß!
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
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ß!
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:
Aber dennoch ist es ja gültiger JavaScript Code?
was denn sonst?
so long - peterS. - pseliger@gmx.net
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.
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ß!
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.
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