我有一些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”, “数据”:[{ “ID”: 1374046117510970000 “名称”: “Test3的”, “classItem”: “smpb.base.classes.SMPBUser”, “dataSliceCode”: “012013”}], “过滤器”:{ “的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);
系统输出:
BEFORE: { “classItem”: “smpb.utility.classes.SMPBBaseObjectsList”, “dataItemsClass”: “smpb.base.classes.SMPBUser”, “dataSliceCode”: “012013”,”数据 “:[{的” ID “:1374044905885298000 下,” 名称 “:” Test3" 的, “classItem”: “smpb.base.classes.SMPBUser”, “dataSliceCode”: “012013”}], “过滤器”:{ “的OrderItems”:[], “filterItems”:[]}}
AFTER: {“classItem”:“smpb.utility.classes.SMPBBaseObjectsList”,“dataItemsClass”:“smpb.base.classes.SMPBUser”,“dataSliceCode”:“012013”,“数据 “:[{” 名称 “:” Test3" 的,的 “ID”:1.374044905885298011E18 下, “classItem”: “smpb.base.classes.SMPBUser”, “dataSliceCode”: “012013”}] “过滤器”:{ “的OrderItems”:[], “filterItems”:[]}}
正如你在Json String中看到的,我的ID值为1374044905885298000,但是当从字符串序列化的对象时我得到了1.374044905885298011E18
问题是龙的这种表现失去了最后的零0000而我得到了长期1374044905885297920
为什么呢?以及如何解决它?
Array中的数据是字符串映射,它已经是所有Long id Double格式。
我尝试使用registerAdapater for Long或Double但从未触发过。
Gson 2.2.4的版本
更新
这不是问题的重复
How to prevent Gson from converting a long number (a json string ) to scientific notation format?
答案 0 :(得分:0)
我无法确切地知道问题是什么,但你可以通过创建另一个类来解决它,即Data
在List
而不是Object
类中使用。我试过这个代码,它对我来说很好用!
因此,您需要将ArrayList<Object>
中的SMPBBaseObjectsList
替换为:
public ArrayList<Data> data = new ArrayList<>()
创建一个像这样的新类:
public class Data {
public Long id;
public String Name;
public String classItem;
public String dataSliceCode;
}
我认为将JSON解析为Object
对象时存在问题,它可能会进行一些导致该数字格式化的转换,但不幸的是我不是这个Java低级问题的专家。 。
无论如何,使用此代码,您明确指定要将该值解析为Long
,因此没有问题!