Hi,
Ich habe ein kleines Object, aus dem ich ein json machen möchte:
var opt = {
"foo": [1, 2, 3],
"bar": function() {alert(1)},
"batz": {
1: "lala",
2: "zack"
}
}Wenn ich dies mit json2 mache, erhalte ich diese Ausgabe:
{"foo":[1,2,3],"batz":{"1":"lala","2":"zack"}}
Soweit so schön, aber wo steckt "bar"? Werden Funktionen ignoriert? War es naiv zu glauben, dass eine Funktion ja _auch_ ein Objekt ist, und daher mit den json.org Spez. übereinstimmen müsste?
Mit FF toSource() erhalte ich dagegen:
({foo:[1, 2, 3], bar:(function () {alert(1);}), batz:{1:"lala", 2:"zack"}})
Wer kann mich aufklären?
Du musst unterscheiden zwischen JSON, einer Notation, wie sie auf json.org beschrieben ist, und JavaScript, welches u.a eine JSON-ähnliche Syntax kennt, um Objekte zu definieren.
Die toSource() Methode zeigt die JavaScript, die Ausgabe von json2 oben ist gültiges JSON (und JavaScript). json.org zeigt mir im Übrigen nicht, dass eine Funktion als Wert zulässig ist. Genauer: als "value" sind nur Strings, Numbers, Object, Array, true, false, null erlaubt. Dabei (und hier liegt dein Denkfehler) ist ein Object kein JavaScript-Object, sondern ein Object, wie es in der Spezifikation etwas weiter oben steht.
Eine name/value-Paarung, mit Kommata getrennt und eingeschlossen von geschweiften Klammern.
Bis die Tage,
Matti