Ersetzen Sie ein JSON-Datum in einer Zeichenfolge durch ein lesbareres Datum

8

Wir möchten JSON einem Benutzer zeigen, der unsere Anwendung testet. Daher nennen wir unseren REST-Service im ASP.NET-Code hinter der Datei und geben eine Zeichenfolge zurück, die eine Menge JSON enthält.

Wir fügen es dann in ein PRE-Element auf der Seite ein, rufen beautify auf, um gut lesbare JSON zu erstellen, und alles ist gut: eine Art von lesbarem Inhalt wird angezeigt.

Gut, aber für eine Sache: Alle Daten werden im normalen JSON-Format wie folgt angezeigt: "/ Date (1319266795390 + 0800) /"

Was ich tun möchte, ist, diese JSON-Daten durch 'normale' Daten in der JSON (C #) - Zeichenkette zu ersetzen, also im nachfolgenden Code, bevor ich die Zeichenkette zum PRE-Element hinzufüge.

Ich habe über eine Regex nachgedacht, aber ich konnte nicht herausfinden, wie ...

    
Michel 18.04.2012, 12:58
quelle

9 Antworten

5

Die Lösung befindet sich innerhalb der in der Frage angegebenen Zeichenfolge. Das JavaScript Date-Objekt analysiert dieses Format und erstellt eine lesbare Version, sodass Date(1319266795390+0800) "Wed Apr 18 2012 08:13:22 GMT-0500 (Central Daylight Time)" zurückgibt.

Um den Schrägstrich aus der Zeichenfolge zu entfernen, können Sie die Funktion replace mit einem regulären Ausdruck verwenden: "/Date(1319266795390+0800)/".replace(/\//g, '') .

    
Eric Brenden 18.04.2012, 13:21
quelle
13

Ich habe mich schon seit einiger Zeit mit Daten in JSON-String beschäftigt, es gibt keinen Standardweg dafür und deshalb gibt es so viele verschiedene Möglichkeiten, es zu tun! Vielleicht wäre es besser, wenn die JSON-Spezifikation überhaupt ein Standardformat für Daten angeben könnte!

Microsoft macht es auf seine eigene Art und Weise, zählt die MSC seit 1970 im UTC-Format, das ist so etwas wie "/Date(1319266795390+0800)/"

Wir haben die obige Zeichenfolge seit der Verwendung von regulären Ausdrücken auf das ISO-8601-Format geändert ASP.Net JavaScriptSerializer Ausgabe. Es ist ein W3C-Standard, menschenlesbar und die Art und Weise, wie die meisten Browser Date to string serialisieren, folgt:

%Vor%

Sie können das Format ganz einfach ändern, um Ihre Anforderungen zu erfüllen und benutzerdefinierte Formate für Datum und Uhrzeit MSDN-Dateien anzeigen zu lassen Artikel hier

So wird es verwendet:

%Vor%

Aktualisierung:

Es gibt eine Alternative, um die JSON-Zeichenfolge, die vom Server in JavaScript zurückgegeben wird, mit Regex:

in ein besser lesbares Format zu ändern %Vor%     
Kamyar Nazeri 09.05.2012 14:19
quelle
3

Sie können dies verwenden:

%Vor%     
jeremy 10.05.2012 10:07
quelle
2

Angenommen, die Klasse, die Sie serialisieren möchten, sieht so aus:

%Vor%

ändere es zu:

%Vor%

oder, wenn diese zusätzliche Eigenschaft nur in der Testumgebung angezeigt werden soll:

%Vor%

auch, anstelle von .ToLongDateString() können Sie .ToString("yyyy-MM-dd HH:mm") oder ein beliebiges anderes Format verwenden

    
y34h 10.05.2012 21:37
quelle
1

Verwenden Sie als Regex etwas wie:

%Vor%

Dies stimmt mit dem Teil in den Klammern von /Date(1319266795390+0800)/ überein. Sie können dann Regex.Replace für die gesamte JSON-Zeichenfolge aufrufen, um die Zahlen durch ein schön formatiertes DateTime zu ersetzen:

Verwenden Sie das Match -Objekt, das Sie im Match-Evaluator-Delegaten erhalten, und extrahieren Sie den Ticks-, zonesign-, zonehour- und zoneminutes-Teil, konvertieren Sie ihn in Ganzzahlen.

Dann wandle die JavaScript-Ticks in .NET-Ticks (sollte * 10000 sein), konstruiere die .NET DateTime aus Ticks und addiere / subtrahiere die Stunden und Minuten für die Zeitzone. Konvertiere das DateTime in eine Zeichenkette und gib es als Ersatz zurück.

    
Markus Meyer 07.05.2012 22:00
quelle
1

Wenn Ihr JSON eine serialisierte Darstellung einer .NET-Klasse ist, könnten Sie vielleicht die DataContractJsonSerializer verwenden, um sie auf dem Server zu deserialisieren, oder vielleicht könnten Sie einfach eine Stub-Klasse für Ihr JSON-Objekt definieren, wenn Sie sie nicht benötigen eine generische Lösung für die Behandlung mehrerer Datensätze:

%Vor%     
Simon MᶜKenzie 09.05.2012 05:26
quelle
1

Verwenden Sie Newtonsoft.JSON. Sie können Ihre eigenen Serialisierer für jeden Typ bereitstellen und die gewünschten Daten serialisieren.

Ссылка

    
Thinking Sites 10.05.2012 19:02
quelle
1

Mache eine String-Eigenschaft für Beispiel dateofbirth Ich definiere hier und gebe deine Datetime-Variable als

zurück %Vor%

, da dies eine Zeichenfolge zurückgibt, so dass sie auf der Clientseite gleich ist, und so auch die Zeichenfolge dateTime vom Benutzer übernimmt und sie konvertiert.

    
Zaheer Ahmed 11.05.2012 13:13
quelle
0
%Vor%     
user1040975 18.02.2014 15:08
quelle

Tags und Links