1

Gson を使用して JSON をオブジェクトに逆シリアル化しているときに、次の例外があります。

com.google.gson.JsonParseException: JsonDeserializer com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter@588722d6 は json オブジェクトのデシリアライズに失敗しました [{"time":1378911600000,"total":0},{"time":1378912500000,"total ":0},{"time":1378913400000,"total":2,"sum":130000,"avgLen":65000.0}] タイプが com.google.gson.ParameterizedTypeImpl@490ca2fa の場合

JSON を表すクラスは次のとおりです。

public class Api{

   private List<ApiData> avgEngLength;

   public Api() {
   }
}

public class ApiData{

private Long time;
private Long total;
private Long sum;
private Double avgLen;

public ApiData(Long time, Long total, Long sum, Double avgLen) {
    this.time = time;
    this.total= total;
    this.sum= sum;
    this.avgLen= avgLen;
 }
}

逆シリアル化されたコードは次のとおりです。

 String json = "{\"avgEngLength\":[{\"time\":1378905300000,\"total\":0},{\"time\":1378906200000,\"total\":2,\"sum\":130000,\"avgLen\":65000.0}]}";
 Gson gson = new GsonBuilder().create();
 return gson.fromJson(json, Api.class);

奇妙なことは、一部のマシンでは機能し、他のマシンでは機能しないことです。何か案が?

4

1 に答える 1

0

私はこれであなたの例を試しました:

public static void main(String[] args) {

    String s = "{\"avgEngLength\":[{\"time\":1378905300000,\"total\":0},{\"time\":1378906200000,\"total\":2,\"sum\":130000,\"avgLen\":65000.0}]}";

    Gson gson = new GsonBuilder().create();
    Api a = gson.fromJson(s, Api.class);
    System.out.println(a);
    }

そしてうまくいきました(例の文字列にはエスケープされた引用符がないことに注意してください)。

Api [avgEngLength=[ApiData [time=1378905300000, total=0, sum=null, avgLen=null], ApiData [time=1378906200000, total=2, sum=130000, avgLen=65000.0]]]

したがって、あなたのチームはさまざまなバージョンのライブラリを使用していると思います。私は Gson 2.2.4 を使用しており、ソース コードを確認しました。そのエラー文字列はライブラリに存在しません。

于 2013-09-12T05:51:10.610 に答える