使用GSON将哈希映射转换为JSON

2022-09-04 22:33:58

我有一个,其中值字符串可以是长字符串,也可以是双精度值。例如,可以存储为(存储为长)和(双精度)。HashMap<String, String>123.000123123.45123.45

取以下两个哈希映射值:

(“一”,“123”);(“两个”,“123.45”)

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

预期: {“一”: 123, “二”: 123.45 }

实际: {“一”: “123”, “两”: “123.45” }

这是我下面的代码:

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

我更喜欢使用GSON的解决方案,但也欢迎使用另一个或多个库。


答案 1

对于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只有有限数量的基元类型,它存储字符串或数字。数值不能区分 、 、 等,所以我不确定你为什么要区分它们。一旦它被存储为Json,它就会被视为相同的数字类型。IntegerLongDouble


答案 2

现在回答这个问题已经很晚了,但它会帮助像我这样偶然发现这个问题的人。

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

Gson 自定义序列化和反序列化