2015-07-24 15 views
7

Ich habe eine HashMap<String, String>, wo die Wert Zeichenfolgen entweder eine lange oder doppelte sein kann. Zum Beispiel kann 123.000 als 123 (so lange gespeichert) und 123.45 als 123.45 (doppelt) gespeichert werden.Konvertieren Hashmap in JSON mit GSON

Nehmen Sie diese zwei hashmap Werte:

("eins", "123"); ("Two", "123.45")

Wenn ich die Karte oben in eine JSON-Zeichenfolge zu konvertieren, sollten die JSON-Werte keine doppelten Anführungszeichen haben, wie

Erwartet: { "one": 123 , "zwei": 123,45}

Aktuell: { "one": "123", "zwei": "123.45"}

Dies ist mein Code unten:

String jsonString = new Gson().toJson(map) 

Ich bevorzuge eine Lösung mit GSON, aber auch eine andere Bibliothek oder Bibliotheken ist ebenfalls willkommen.

+4

Eigentlich ja [sie sollten] (https://tools.ietf.org/html/rfc4627) – hd1

+3

Verwandeln Sie Ihre aktuelle Karte in eine 'Map ' oder 'Map ' und speichern Sie geeignete Werte. –

+0

Warum abstimmen, wenn Sie die Frage nicht mögen? Es ist nichts falsch daran, die obige Frage zu stellen. – user3366706

Antwort

4

Für Gson erwarten Sie folgende Konvertierungen zu erhalten:

Map<String, Double> -> {"one": 123, "two":123.45} 
Map<String, Number> -> {"one": 123, "two":123.45} 
Map<String, String> -> {"one": "123", "two": "123.45"} 

Grundsätzlich gibt es keine Möglichkeit Gson zu bekommen, um automatisch Ihre Strings in numerische Werte umzuwandeln. Wenn Sie möchten, dass sie als numerisch angezeigt werden (d. H. Ohne Anführungszeichen), müssen Sie den entsprechenden Datentyp in der Karte Double oder Number speichern.

Auch Json hat nur eine begrenzte Anzahl von primitiven Typen, es speichert String oder numerisch. Ein numerischer Wert unterscheidet nicht zwischen Integer, Long, Double usw. Ich bin mir nicht sicher, warum Sie versuchen, sie zu unterscheiden. Sobald es als Json gespeichert ist, wird alles als derselbe numerische Typ betrachtet.

+0

Ja, aber ich möchte das Standardverhalten ändern, wie in der Frage – user3366706

+0

@ user3366706 erwähnt. Warum nicht einfach/convert - in eine Map . Es macht keinen Sinn, zwischen Double und Integer zu unterscheiden, denn sobald es in Json ist, haben Sie nur einen einzigen numerischen Typ. – bcorso

+0

@bcorsp Bitte lesen Sie die Frage erneut – user3366706