私はいくつかのオブジェクトクラスオブジェクトの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," Name":"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","data":[{ "id":1374044905885298000 ,"Name":"Test3","classItem":"smpb.base.classes.SMPBUser","dataSliceCode":"012013"}],"filter":{"orderItems":[],"filterItems":[ ]}}
AFTER: {"classItem":"smpb.utility.classes.SMPBBaseObjectsList","dataItemsClass":"smpb.base.classes.SMPBUser","dataSliceCode":"012013","data":[{"名前":" Test3"、"id":1.374044905885298011E18、"classItem":"smpb.base.classes.SMPBUser"、"dataSliceCode":"012013"}]、"filter":{"orderItems":[]、"filterItems": []}}
Json String でわかるように、値が 1374044905885298000 の ID がありますが、オブジェクトを文字列からシリアル化すると、1.374044905885298011E18 が得られます
問題は、Long のこの表現が最後のゼロ 0000 を失い、Long 1374044905885297920 を得たことです。
なんで?そして、どのように修正しますか?
Array のデータは String マップで、すでにすべて Long id Double 形式です。
Long または Double の registerAdapter を試してみましたが、トリガーされませんでした。
Gson 2.2.4 のバージョン
アップデート
質問の重複ではありません