Gibt es eine Möglichkeit, meine replacer vor eine der angerufenen zu erhalten Objekts eigenen toJSON
verwandelt es, so dass ich mit dem ursprünglichen Objekt arbeiten kann, anstatt seine JSON freundliche Form, ohne die toJSON
auf dem Objekt oder dessen Prototyp zwingenden , das Objekt vorverarbeiten, oder meine eigene Version von JSON.stringify
schreiben? Beispiel: Angenommen, ich möchte Date
Instanzen anders als ihre normale Serialisierung (which is toISOString
) serialisieren (Diese Frage ist nicht spezifisch Date
, das ist nur ein Beispiel.) Das Problem ist, mein replacer nicht das Date
Objekt sieht, ist es eine Zeichenfolge sieht (siehe Code-Schnipsel unten), weil Date.prototype.toJSON
genannt wird vor meine replacer .Den Ersetzer * vor * dem Objekt toJSON aufrufen?
var obj = {
d: new Date()
};
snippet.log(getType(obj.d)); // "[object Date]"
var json = JSON.stringify(obj, function(key, value) {
if (key === "d") {
snippet.log(getType(value)); // "string" <== Want to see a Date here
}
return value;
});
function getType(value) {
var to = typeof value;
if (to === "object") {
to = Object.prototype.toString.call(value);
}
return to;
}
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
Gibt es eine Möglichkeit, die replacer ersten genannt zu bekommen? Ich möchte nicht Date.prototype.toJSON
überschreiben, das Objekt vorverarbeiten oder meine eigene JSON.stringify
schreiben, aber ich sehe keinen anderen Weg.
Schön. Es ist sogar [funktioniert für den Ausnahmefall] (http://jsbin.com/zeciqiwawo/1), wo Sie ein Dokumentfragment ('JSON.stringify (new Date())'), nicht ein ganzes Dokument, danke zu [Schritte 9-11] (http://www.ecma-international.org/ecma-262/5.1/#sec-15.12.3). –
wirklich schön ein .. –