我有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的解决方案,但也欢迎使用其他库或库。
答案 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自动将字符串转换为数字值。如果您希望它们显示为数字(即不带引号),则需要在地图中存储相应的数据类型Double
或Number
。
此外,Json只有有限数量的基本类型,它存储字符串或数字。数值不区分Integer
,Long
,Double
等,因此我不确定您为什么要尝试区分它们。一旦它被存储为Json,它们都被认为是相同的数字类型。
答案 1 :(得分:0)
现在回答这个问题很晚,但是它将帮助像我这样偶然发现此问题的人。
使用以下链接来构建您的自定义Gson序列化,该序列化会将数字字符串解析为适当的数字类型。 (简单的if-else或基于小数点的开关)。