我有一个里面有任意值的json对象。我想在Map中反序列化它。除了将整数转换为双精度数外,一切都可以。参见示例:
{"id":1, "inner_obj":{"key":"value","num":666,"map":{"key":"value"}}}
反序列化为以下内容(map.toString()):
{id=1.0, inner_obj={key=value, num=666.0, map={key=value}}}
是否有简单的方法将“id”和“num”反序列化为Integers而不是Double?
8条答案
按热度按时间rmbxnbpk1#
JSON中没有整数类型,1和1.0是一样的,你需要在代码中把1.0解析成1,或者你需要把JSONMap到某个VO类,显式定义该类的字段类型,这样GSON就能理解你要找的东西。
xt0899hw2#
我自己一直在寻找嵌套Map问题的解决方案,上面的""是第一个在非平凡用例中实际上有帮助的答案。
由于上面的解决方案只处理了第一个问题,因此更新了解决方案以提供String和布尔值的通用解析功能,请参见下面的更新代码:
wlzqhblo3#
JSON只有一个Number类型,解析器无法自动判断要将其转换为什么类型。
如果你不打算使用强类型对象图,考虑使用JsonElement类型:
new9mtju4#
这是我的准则
kt06eoxx5#
为了避免可能的ClassCastException,最好先转换为
Number
。在下面的代码中,map
从JSON反序列化为没有泛型的Map
。w7t8yxp56#
下面是我的例子,第一部分是类的定义,这个类有一个int类型的字段。
然后TypeAdapter将Gson中的数字类型转换为一个Java对象。
第三部分是测试数据,它工作。
2jcobegt7#
寄存器类型适配器为
Map
:并使用它进行反序列化,如下所示:
gson.fromJson(instanceJson, Map.class)
,其中instanceJson
是应该反序列化为Map
对象的json
。luaexgnf8#
这是我解决这个问题的方法。2我试着尽可能简洁地实现它。3我没有找到一个更好的简单的方法来检查一个数是否是整数。