C'è un modo per ottenere il mio sostituto chiamato prima di un oggetto proprio toJSON
lo trasforma, in modo che possa lavorare con l'oggetto originale piuttosto che sulla forma JSON-friendly, senza sovrascrivendo il toJSON
sull'oggetto o il suo prototipo , pre-elaborazione dell'oggetto o scrittura della mia versione di JSON.stringify
?Chiama il replacer * prima * toJSON dell'oggetto?
Ad esempio: Si supponga di voler serializzare le istanze Date
in modo diverso rispetto alla loro normale serializzazione (which is toISOString
). (Questa domanda è non specifico per Date
, questo è solo un esempio.) Il problema è che il mio sostituto non vede l'oggetto Date
, vede una stringa (vedi frammento sotto) perché Date.prototype.toJSON
viene chiamato prima mio sostituto .
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>
C'è un modo per ottenere il supplente chiamato prima? Non voglio eseguire l'override di Date.prototype.toJSON
, pre-elaborare l'oggetto o scrivere il mio JSON.stringify
, ma non vedo un altro modo.
Bello. Persino [funziona per il caso eccezionale] (http://jsbin.com/zeciqiwawo/1) dove stai stringendo un frammento di documento ('JSON.stringify (new Date())'), non un intero documento, grazie a [passaggi 9-11] (http://www.ecma-international.org/ecma-262/5.1/#sec-15.12.3). –
davvero bello .. –