java - GSON解析通用Json数组

标签 java json gson

我的问题与此非常相似: Unable to parse Json array using Gson

但我无法从中得到答案。 上面链接的答案:

public static List<MapData> getData(){
    Gson gson = new Gson();
    String jsonString = "[{\"id\":18,\"city\":\"test\",\"street\":\"test 1\",\"zipcode\":121209,\"state\":\"IL\",\"lat\":32.158138,\"lng\":34.807838},{\"id\":19,\"city\":\"test\",\"street\":\"1\",\"zipcode\":76812,\"state\":\"IL\",\"lat\":32.161041,\"lng\":34.810410}]";
    Type type = new TypeToken<List<MapData>>(){}.getType();
    return gson.fromJson(jsonString, type);     
}

它工作得很好,但我想在泛型类型上使用隐式运算符。见下文:

public static <T> List<T> getData(Class<T> classT){
    Gson gson = new Gson();
    String jsonString = "[{\"id\":18,\"city\":\"test\",\"street\":\"test 1\",\"zipcode\":121209,\"state\":\"IL\",\"lat\":32.158138,\"lng\":34.807838},{\"id\":19,\"city\":\"test\",\"street\":\"1\",\"zipcode\":76812,\"state\":\"IL\",\"lat\":32.161041,\"lng\":34.810410}]";
    Type type = new TypeToken<List<T>>(){}.getType();
    return gson.fromJson(jsonString, type);
}

然后我尝试将 Class 参数传递给该方法:

List<MapData> data = getData(MapData.class);
System.out.println(data.get(0).city);

然后出现错误:

java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to com.ssc.ctq.nav.util.MapData 

谁能告诉我为什么会出现这个错误? TypeToken 类不支持隐式运算​​符吗?

最佳答案

你可以这样做:

     Gson gson = new Gson();

    String jsonString = "[{\"id\":18,\"city\":\"test\",\"street\":\"test 1\",\"zipcode\":121209,\"state\":\"IL\",\"lat\":32.158138,\"lng\":34.807838},{\"id\":19,\"city\":\"test\",\"street\":\"1\",\"zipcode\":76812,\"state\":\"IL\",\"lat\":32.161041,\"lng\":34.810410}]";

    List<Map> tmpList = gson.fromJson(jsonString);
    List<T> resultList = new Arraylist<T>(tmplist.size());
    for(Map map:tmpList){
       String tmpJson = gson.toJson(map);
       resultList.add(gson.fromJson(tmpJson, classT));
    }
    return resultList;

关于java - GSON解析通用Json数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18712495/

相关文章:

java - "Javac"在 Windows 10 上无法正常工作

java - f :param is null in bean jsf

java - 如何在RecyclerView上设置onClickListener?

java - 垫 : How do you diagnose "x instances of "byte[ ]", loaded by "<system class loader >"occupy y (z%) bytes" memory issues?

json - 使用组合器将 Scala 对象转换为 Json Formatter

android - 如何在 Google maps direction api 中获取距离和持续时间

Android - 如何在 Robospice/retrofit 中获取 JSON 格式的请求和响应

java - 如何向 JsonObject 添加新的字段/元素?

java - GSON 所需的最低 Java 版本

java - 使用 GSON 检查 JSON 是否适合所需的类