【发布时间】:2013-07-17 08:49:56
【问题描述】:
我有一些对象的 json 字符串表示 类对象是
public class SMPBBaseObjectsList {
public ArrayList<Object> data = new ArrayList<>();
public Integer count;
public Integer limitFrom;
public Integer limitTo;
public Boolean hasMore;
public String dataItemsClass;
}
我有 json
{"classItem":"smpb.utility.classes.SMPBBaseObjectsList","dataItemsClass":"smpb.base.classes.SMPBUser","dataSliceCode":"012013","data":[{"id": 1374046117510970000,"名称":"Test3","classItem":"smpb.base.classes.SMPBUser","dataSliceCode":"012013"}],"filter":{"orderItems":[],"filterItems": []}}
我尝试解析这个 json 并使用下一个代码创建我的类的对象:
String json = "{\"classItem\":\"smpb.utility.classes.SMPBBaseObjectsList\",\"dataItemsClass\":\"smpb.base.classes.SMPBUser\",\"dataSliceCode\":\"012013\",\"data\":[{\"id\":1374046117510970000,\"Name\":\"Test3\",\"classItem\":\"smpb.base.classes.SMPBUser\",\"dataSliceCode\":\"012013\"}],\"filter\":{\"orderItems\":[],\"filterItems\":[]}}";
SMPBBaseObjectsList list = new GsonBuilder().create().fromJson(json, SMPBBaseObjectsList.class);
System.out.println("BEFORE:" + json);
System.out.println("AFTER: " + list);
系统输出:
之前:{"classItem":"smpb.utility.classes.SMPBBaseObjectsList","dataItemsClass":"smpb.base.classes.SMPBUser","dataSliceCode":"012013","数据":[{"id":1374044905885298000,"Name":"Test3","classItem":"smpb.base.classes.SMPBUser","dataSliceCode":"012013"}], "filter":{"orderItems":[],"filterItems":[]}}
之后: {"classItem":"smpb.utility.classes.SMPBBaseObjectsList","dataItemsClass":"smpb.base.classes.SMPBUser","dataSliceCode":"012013","数据":[{"Name":"Test3","id":1.374044905885298011E18,"classItem":"smpb.base.classes.SMPBUser","dataSliceCode":"012013"}] ,"filter":{"orderItems":[],"filterItems":[]}}
正如您在 Json String 中看到的,我的 ID 值为 1374044905885298000,但是当从字符串序列化对象时,我得到 1.374044905885298011E18
问题是Long丢失最后一个零0000的这种表示,我得到了Long 1374044905885297920
为什么?以及如何解决?
Array中的数据是String map,已经是Long id Double格式了。
我尝试将 registerAdapater 用于 Long 或 Double 但从未触发。
Gson 2.2.4 版本
更新
这不是问题的重复
How to prevent Gson from converting a long number (a json string ) to scientific notation format?
【问题讨论】:
-
不是。如果您阅读 anwsers,您会发现它不是反序列化的解决方案,它只是 STRING 表示。但是如果你尝试反序列化 JsonElement jsonElement = jsonParser.parse(json);上课你得到了我的错误。
-
要修复它,您可以编写自定义反序列化器类。看这里:stackoverflow.com/questions/5845822/…