Ist es möglich, Funktionen in JSON-Ergebnissen zu definieren?
Teil einer website JSON-Antwort hatte (... Hinzugefügt Kontext):
{..., now:function(){return(new Date).getTime()}, ...}
Ist das hinzufügen von anonymen Funktionen zur JSON-gültig? Ich würde erwarten, dass jedes mal, wenn Sie access 'Zeit', um einen anderen Wert.
InformationsquelleAutor der Frage Zachary Scott | 2010-01-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht.
JSON ist rein dazu gedacht, eine Daten-Beschreibungssprache. Wie bereits auf http://www.json.orges ist ein "lightweight data-interchange format." - keine Programmiersprache.
Pro http://en.wikipedia.org/wiki/JSONdie "Grundtypen" unterstützt werden:
Punkt)
mit backslash escaping)
(true und false)
Folge von Werten, durch Kommata getrennt
und in eckige Klammern eingeschlossen)
Paare werden durch Kommas getrennt und eingeschlossen
in geschweiften Klammern)
null
InformationsquelleAutor der Antwort Mike
Das problem ist, dass JSON als Daten definition Sprache entwickelte sich aus dem JSON als JavaScript Object Notation. Da Javascript unterstützt eval auf JSON, ist es legitim, zu setzen JSON-code in JSON (in diesem use-case). Wenn Sie JSON-Daten aus der Ferne, dann würde ich sagen, es ist eine schlechte Gewohnheit, legen Sie die Methoden in der JSON-vielleicht, weil Sie nicht modelliert haben, Ihre client-server-Interaktion. Und weiter, wenn Sie wollen, um die Verwendung von JSON als Daten-Beschreibungssprache ich würde sagen, Sie könnte sich selbst in Schwierigkeiten durch die Einbettung von Methoden, weil einige JSON-Parser geschrieben wurden, mit nur-Daten-Beschreibung im Geist und unterstützt möglicherweise nicht die Methode Definitionen in der Struktur.
Wikipedia JSON-Eintrag macht einen guten Fall für nicht einschließlich der Verfahren, die in JSON, unter Berufung auf Sicherheitsbedenken:
InformationsquelleAutor der Antwort harschware
Ist es nicht standard, soweit ich weiß. Ein kurzer Blick auf http://json.org/ bestätigt dies.
InformationsquelleAutor der Antwort jldupont
Let ' s Zitat einer der spec - http://tools.ietf.org/html/rfc7159#section-12
Den Die JavaScript Object Notation (JSON) Data Interchange Format-Spezifikation Staaten:
Also alle Antworten, die besagen, dass die Funktionen nicht Teil der JSON-standard korrekt sind.
Die offizielle Antwort ist: Nein, es ist nicht gültig zu definieren, die Funktionen im JSON-Ergebnisse!
Die Antwort könnte ja sein, weil "code data" und "Daten-code".
Auch wenn JSON verwendet wird, wie eine Sprache, die unabhängige Daten-Serialisierung-format, um ein tunneling von "code" durch andere Arten funktioniert.
Einen JSON-string kann verwendet werden, um passieren eine JS-Funktion auf der client-Seite browser für die Ausführung.
Dies führt zur Frage: Wie "Ausführung von JavaScript-code als string gespeichert".
Vorbereitet werden, zu erhöhen Ihrer "eval() ist böse" - fahne und halten Sie Ihre "nicht-tunnel-Funktionen durch JSON" Flagge neben ihm.
InformationsquelleAutor der Antwort Jens A. Koch
NÖ, definitiv nicht.
Wenn Sie eine anständige JSON serializer, es nicht zulassen, Sie serialisieren, die eine Funktion wie das. Es ist ein gültiges OBJEKT, aber kein gültiges JSON. Was auch immer, die website ist Absicht, es nicht zu senden gültiges JSON.
InformationsquelleAutor der Antwort jvenema
JSON explizit ausschließt Funktionen, denn es ist nicht dazu gedacht, um eine JavaScript-Daten
Struktur (trotz der JS im Namen).
InformationsquelleAutor der Antwort Tatu Ulmanen
Kurze Antwort ist KEINE...
Blick auf den Grund, warum:
Aber warten...
Gibt es immer noch Möglichkeiten zum speichern Ihrer Funktion, wird es weit nicht empfohlenaber immer noch möglich:
Haben wir gesagt, können Sie sparen eine
string
... wie wäre es mit der Umwandlung Ihrer Funktion einen string der dann?Dann können Sie stringify Daten mit
JSON.stringify(data)
und dann mitJSON.parse
analysieren (falls dieser Schritt erforderlich)...Und eval zum ausführen einer string-Funktion (bevor Sie das tun, nur Sie wissen lassen, die Verwendung von eval allgemein nicht empfohlen):
InformationsquelleAutor der Antwort Alireza
Lassen Sie die Anführungszeichen aus...
InformationsquelleAutor der Antwort Clif Collins