2015-07-24 14 views
7

Ho un HashMap<String, String>, in cui le stringhe di valori possono essere lunghe o doppie. Ad esempio, 123.000 può essere memorizzato come 123 (memorizzato come lungo) e 123.45 come 123.45 (doppio).Converti Hashmap in JSON utilizzando GSON

Prendete questi due valori: HashMap

("uno", "123"); ("Due", "123.45")

Quando converto la mappa qui sopra in una stringa JSON, i valori JSON non dovrebbero avere doppi apici, come

previsto: { "uno": 123 , "due": 123.45}

reale: { "uno": "123", "due": "123.45"}

Questo è il mio codice qui sotto:

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

Preferisco una soluzione che utilizza GSON, ma anche l'utilizzo di un'altra libreria o di altre librerie è il benvenuto.

+4

In realtà, sì [dovrebbero] (https://tools.ietf.org/html/rfc4627) – hd1

+3

Trasforma la tua mappa corrente in un 'Map ', o 'Map ' e memorizzare i valori appropriati. –

+0

Perché non votare se non ti piace la domanda? Non c'è niente di sbagliato nel porre la domanda di cui sopra. – user3366706

risposta

4

Per GSON otterrai i seguenti conversioni:

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

In sostanza, non c'è alcun modo per ottenere GSON per convertire automaticamente le stringhe in valori numerici. Se si desidera che vengano visualizzati come numerici (ovvero senza virgolette) è necessario memorizzare il tipo di dati appropriato nella mappa, Double o Number.

Inoltre, Json ha solo un numero limitato di tipi primitivi, memorizza stringa o numerico. Un valore numerico non distingue tra Integer, Long, Double, ecc., Quindi non sono sicuro del motivo per cui si sta tentando di distinguerli. Una volta memorizzato come JSON, viene considerato come lo stesso tipo numerico.

+0

Sì, ma desidero modificare il comportamento predefinito come indicato nella domanda – user3366706

+0

@ user3366706 Perché non usare/converti in una mappa . Non ha senso cercare di distinguere tra Double e Integer perché una volta in Json tutto ciò che hai è un singolo tipo numerico. – bcorso

+0

@bcorsp per favore leggi di nuovo la domanda – user3366706