Java JSON反序列化后访问LinkedHashMap中的嵌套对象

Java JSON反序列化后访问LinkedHashMap中的嵌套对象,java,json,gson,linkedhashmap,invocationtargetexception,Java,Json,Gson,Linkedhashmap,Invocationtargetexception,我正在尝试访问LinkedHashMap中的对象,但在尝试访问时得到了InvocationTargetException。 LinkedHashMap是使用Gson库从JSON转换为一系列Java对象的结果。对象“列表”包含所有其他元素: public class List{ private Clouds clouds; private Number dt; private String dt_txt; private Main main; private Rain

我正在尝试访问
LinkedHashMap
中的对象,但在尝试访问时得到了
InvocationTargetException
LinkedHashMap
是使用Gson库从JSON转换为一系列Java对象的结果。对象“列表”包含所有其他元素:

public class List{
   private Clouds clouds;
   private Number dt;
   private String dt_txt;
   private Main main;
   private Rain rain;
   private Sys sys;
   private List weather;
   private Wind wind;
}
该类还包含getter和setter

当我执行以下操作时:

for(LinkedHashMap l : ArrayList<LinkedHashMap> result.getList()) {
    Number dt = (Number) l.get("dt");
}
我将获得一个
调用targetException
。有什么想法、建议或窍门吗

编辑:

堆栈跟踪:

 09-19 14:37:59.448: E/AndroidRuntime(11192): FATAL EXCEPTION: main
 09-19 14:37:59.448: E/AndroidRuntime(11192): java.lang.ClassCastException:    com.google.gson.internal.LinkedHashTreeMap cannot be cast to com.censored.weather.Main
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at   com.censored.censored.VenloAppDelegate$GetWeatherTask.onPostExecute(VenloAppDelegate.java:305)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at com.censored.censored.VenloAppDelegate$GetWeatherTask.onPostExecute(VenloAppDelegate.java:1)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at android.os.AsyncTask.finish(AsyncTask.java:631)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at android.os.AsyncTask.access$600(AsyncTask.java:177)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at android.os.Handler.dispatchMessage(Handler.java:99)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at android.os.Looper.loop(Looper.java:153)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at android.app.ActivityThread.main(ActivityThread.java:5297)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at java.lang.reflect.Method.invokeNative(Native Method)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at java.lang.reflect.Method.invoke(Method.java:511)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)

首先,发布整个堆栈跟踪。其次,
List
对于Java中的类名来说是一个非常危险的选择。第三,我怀疑您的
for
循环是否是实际的代码,而不是您为演示而提出的示例;声明语法是怎么回事?是的,for循环只是一小段演示代码,因为实际的源代码相当长和复杂。我知道列表是一个非常危险的选择,但我并没有选择它。这是一个相当大的现有项目。我将发布堆栈跟踪,但我调试了它,并在尝试将l.get('main')分配给main时抛出InvocationTargetException。好的,但是从哪里开始?我怀疑
get
调用是否抛出了异常,您的问题的答案可能包含在引擎盖下反射系统试图做的事情中。人为示例没有帮助的部分原因是,我们看不到涉及到什么实际类型来理解
get
是如何实现的。所以这几乎肯定是错误的
l.get(“main”)
返回的是
LinkedHashTreeMap
,而不是您所期望的;我强烈怀疑
Main
是一个嵌套的复杂类型,您将其视为一个映射而不是POJO。从该行获得的异常是
ClassCastException
,而不是
InvocationTargetException
 09-19 14:37:59.448: E/AndroidRuntime(11192): FATAL EXCEPTION: main
 09-19 14:37:59.448: E/AndroidRuntime(11192): java.lang.ClassCastException:    com.google.gson.internal.LinkedHashTreeMap cannot be cast to com.censored.weather.Main
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at   com.censored.censored.VenloAppDelegate$GetWeatherTask.onPostExecute(VenloAppDelegate.java:305)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at com.censored.censored.VenloAppDelegate$GetWeatherTask.onPostExecute(VenloAppDelegate.java:1)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at android.os.AsyncTask.finish(AsyncTask.java:631)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at android.os.AsyncTask.access$600(AsyncTask.java:177)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at android.os.Handler.dispatchMessage(Handler.java:99)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at android.os.Looper.loop(Looper.java:153)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at android.app.ActivityThread.main(ActivityThread.java:5297)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at java.lang.reflect.Method.invokeNative(Native Method)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at java.lang.reflect.Method.invoke(Method.java:511)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)