Warum JSON.stringify Schraube bis mein datetime-Objekt?
{ id: 1533,
story_type_id: 1,
content_id: 470,
created_at: Sun, 05 Feb 2012 07:02:43 GMT,
updated_at: Sun, 05 Feb 2012 07:02:43 GMT,
type_name: 'post' }
Habe ich ein JSON-Objekt mit der "datetime" - Feld wie oben. Es ist perfekt. Aber wenn ich stringify es (ich will es speichern, im cache), bekomme ich dieses format:
"created_at":"2012-02-05T07:02:43.000Z"
Dies verursacht Probleme, weil, wenn möchte ich JSON.analysieren diese, plötzlich ist es nicht mehr datetime-format ist, und es ist unvereinbar mit meinem anderen format.
Was kann ich tun, um dieses problem zu lösen? Ich habe 'created_at' übersät, die überall in meiner Anwendung. Ich will nicht manuell ändern jede.
- Vermutlich bist du serialising diese Daten zu speichern im "localStorage". In diesem Fall können Sie vermeiden, aggro, wie dies und ähnliches durch die Verwendung einer wrapper-Bibliothek, wie rhaboo.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es gibt keine Besondere Art und Weise zu serialisieren
Date
Objekte im JSON-Format. Das ist, warum man die standardisierten string-Darstellung. Benötigen Sie zu konvertieren zurück zuDate
Objekte, indem man Sie auf dieDate
Konstruktor.Update: Mit der
reviver
- Funktion (siehe Kommentare), können Sie dieDate
Objekte zurück.Date
Objekt ist, um native JavaScript, aber JSON ist eine Serialisierungs-Mechanismus verwendet, um den transport von Daten zwischen Plattformen. Wenn es erlaubt Serialisierung von native Objekte und Funktionen, Systeme, übertragung von JSON von JS, um, sagen wir, PHP brechen würde. Möchten Sie vielleicht einen Blick in die JSON -reviver
Methoden.reviver
Funktion.RegExp
entlang der Linien von/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d+Z$/
var date = new Date(value); value = isNaN(date.getTime()) ? date : value;
Ist es tatsächlich möglich, zu ändern, wie ein Date-Objekt in das JSON serialisiert werden. Kombiniert mit der reviver-Funktion, eine bi-direktionale Lösung können erstellt werden, die automatisch arbeiten zur Serialisierung und kann leicht verwendet werden, auf der Deserialisierung.
Zuerst ändern Sie die Serialisierung wie diese:
Diese Einstellung verändert die Darstellung des Date-Objekts in einen UNIX-timestamp mit einem Präfix als marker:
Dann können Sie eine reviver-Funktion, die automatisch filtert diese Werte:
(Credit: Dieser code wurde im wesentlichen kopiert von dieser Antwort, die in einer ähnlichen Frage: https://stackoverflow.com/a/14509447/2572897)
Nun mit diesem setup Deserialisierung von unserem Ergebnis ab, bevor das Ergebnis in ein Datum-Objekt einmal:
Oder Sie können wählen, ändern Sie die Serialisierung, sondern stattdessen die regexp zu fangen, die standard-Serialisierung format:
Beispiel:
Datum.der Prototyp.toJSON = function() { return moment(dieser).format('L'); }
Lesen Sie mehr über moment, Dokumentation und maßgeschneiderte Art von Datum, das Sie wollen, um zurückzukehren.
https://weblog.west-wind.com/posts/2014/Jan/06/JavaScript-JSON-Date-Parsing-and-real-Dates