2011-08-26 86 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; 結果結果;