使用GSON将Hashmap转换为JSON

时间:2015-07-24 22:22:44

标签: java json gson

我有HashMap<String, String>,其中值字符串可以是long或double。例如,123.000可以存储为123(存储为长),123.45可以存储为123.45(双精度)。

获取这两个hashmap值:

  

(&#34; one&#34;,&#34; 123&#34;); (&#34;两个&#34;,&#34; 123.45&#34;)

当我将上面的地图转换为JSON字符串时,JSON值不应该有双引号,例如

  

预期:{&#34;一个&#34;:123,&#34;两个&#34;:123.45}

     

实际:{&#34;一个&#34;:&#34; 123&#34;,&#34;两个&#34;:&#34; 123.45&#34; }

这是我的代码:

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

我更喜欢使用GSON的解决方案,但也欢迎使用其他库或库。

2 个答案:

答案 0 :(得分:7)

对于Gson,您将获得以下转换:

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

基本上,没有办法让Gson自动将字符串转换为数字值。如果您希望它们显示为数字(即不带引号),则需要在地图中存储相应的数据类型DoubleNumber

此外,Json只有有限数量的基本类型,它存储字符串或数字。数值不区分IntegerLongDouble等,因此我不确定您为什么要尝试区分它们。一旦它被存储为Json,它们都被认为是相同的数字类型。

答案 1 :(得分:0)

现在回答这个问题很晚,但是它将帮助像我这样偶然发现此问题的人。

使用以下链接来构建您的自定义Gson序列化,该序列化会将数字字符串解析为适当的数字类型。 (简单的if-else或基于小数点的开关)。

Gson Custom Serialization and Deserialization

相关问题