gpt4 book ai didi

Java Gson 解析未正确反序列化

转载 作者:行者123 更新时间:2023-12-02 06:29:47 24 4
gpt4 key购买 nike

我有一个List<List<Integer>>具有值(value)

[[537316070],[306297332],[319303159],[538639811],[528406093],[166705854],[124574525],[967403337],[569514785],[304831454],[219384921],[308948513],[355538394],[297996417]]

用 Gson 序列化后。

当我使用反序列化它时

List<List<Integer>> data = (List<List<Integer>>) GsonParser.gson.fromJson(datastr, List.class);

我正在获取

[[5.3731607E8], [3.06297332E8], [3.19303159E8], [5.38639811E8], [5.28406093E8], [1.66705854E8], [1.24574525E8], [9.67403337E8], [5.69514785E8], [3.04831454E8], [2.19384921E8], [3.08948513E8], [3.55538394E8], [2.97996417E8]]

有人知道这是怎么回事吗?

谢谢

最佳答案

Gson 默认情况下将任何 JSON 数字解析为 double。这发生在 ObjectTypeAdapter#read(JsonReader) 方法中:

...
case NUMBER:
return in.nextDouble();
...

执行以下操作

List<List<Integer>> data = GsonParser.gson.fromJson(json, new TypeToken<List<List<Integer>>>() {}.getType());

将它们作为Integer实例获取。

TypeToken 是一种 Java hack,用于获取实际的泛型参数类型。 javadoc

Constructs a new type literal. Derives represented class from type parameter.

Clients create an empty anonymous subclass. Doing so embeds the type parameter in the anonymous class's type hierarchy so we can reconstitute it at runtime despite erasure.

关于Java Gson 解析未正确反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20181259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com