2011-08-26 85 views
0

任何想法为什么JSON不会映射到java对象?无法将Json字符串反序列化为POJO(使用GSON)

代码..

String result = "{\"outerclass\":{\"innerclass\":{\"booleanA\":true,\"stringB\":\"b\",\"stringC\":\"c\"}}}\n"; 

Gson gson = new Gson(); 
TempObject o = gson.fromJson(result,TempObject.class); 

的POJO ..

public class TempObject { 

    public static class outerclass { 

     public static class innerclass { 

     public static boolean booleanA; 
     public static String stringB; 
     public static String stringC; 

     }  

    } 

    } 

其他例子..

String result = "{\"idata\":{\"result\":{\"error\":true,\"errorMessage\":\"Invalid username and/or password\",\"requestTime\":\"2011-08-26T18:39:02Z\"}}}"; 
Gson gson = new Gson(); 
UserData d = gson.fromJson(result, UserData.class); 

类..

public class UserData { 

    idata data; 

    public static class idata { 
     result res; 

     public static class result { 

      public boolean error; 
      public String errorMessage; 
      public String requestTime; 
     }  
    } 
} 
+0

你会得到什么错误或失败? –

+0

没有错误信息。 o是空的,而o.outerclass.innerclass.stringB返回null – Sarah

+0

嗯,一切看起来都没错。您应该尝试编译代码(如上所述),并确保实际代码中没有任何小错字。也许在你的字符串的末尾放下\ n,它没有任何用处。 – uvesten

回答

0

如果我没有弄错,那是因为所有的字段都是静态的,那些字段与每个单独的对象都没有关系。

所以我认为类应该看起来像:

public class TempObject { 

    Outerclass outerclass; 

    public static class Outerclass { 
     Innerclass innerclass; 

     public static class Innerclass { 

      public boolean booleanA; 
      public String stringB; 
      public String stringC; 
     }  
    } 
} 

例如,我的机器上,输出:

public class Example{ 
    public static void main(String[] args) { 
     String result = "{\"outerclass\":{\"innerclass\":{\"booleanA\":true,\"stringB\":\"b\",\"stringC\":\"c\"}}}\n"; 
     Gson gson = new Gson(); 
     TempObject o = gson.fromJson(result, TempObject.class); 
     System.out.println(gson.toJson(o)); 
    } 

    public static class TempObject { 

     Outerclass outerclass; 

     public static class Outerclass { 
      Innerclass innerclass; 

      public static class Innerclass { 

       public boolean booleanA; 
       public String stringB; 
       public String stringC; 
      }  
     } 
    } 
} 

是:

{"outerclass":{"innerclass":{"booleanA":true,"stringB":"b","stringC":"c"}}} 
+0

这没有奏效。 TempObject初始化,但outerClass为空。我已经尝试了许多变体的static/public/private,并将内部类的类拉入单独的类。关于gson我有一些基本的东西是我想要的? – Sarah

+0

我添加的代码(编辑一下以匹配大小写)适合我。请参阅编辑。 – MByD

+0

谢谢,但它仍然无法正常工作。对你来说,它将所有变量填充到o?我的编译和运行没有错误,但实际上并没有对o做任何事情。 – Sarah

0

你是无法反序列化,因为变量名称与您的Json中的键不匹配。在你的第二个例子中

String result = "{\"idata\":{\"result\":{\"error\":true,\"errorMessage\":\"Invalid username and/or password\",\"requestTime\":\"2011-08-26T18:39:02Z\"}}}"; 

idata data; 
result res; 

对象名称应该与JSON中的键匹配,但不能与类名称匹配。

IData idata; 结果结果;