2014-05-05 27 views
2

假設我有一個類:gson.fromJson當JSON對象與Java對象不一致

class A { 
    List<C> b; 
} 

class C { 
    String str; 
} 

而且我有一個包含以下內容的JSON字符串:

{ 
    "b": [ 
     { ... }, 
     { ... } 
    ] 
} 

這樣算下來下面將工作就好:

Gson gson = new Gson(); 
gson.fromJson(jsonString, A.class); 

但現在我有一個更復雜的情況下,我使用相同的JSON提供更多數據,但我仍然想使用gson作爲它非常好的庫。 所以現在我的JSON如下:

{ 
    "b": [ 
     { ... }, 
     { ... } 
    ], 
    "c": 7 
} 

是否可以告訴GSON對象忽略它不能評價? 所以它只會從我的A課程中知道,或者我使用@SerializedName指定的內容?

林意識到的更原始的方式,使用JSONObject,但對於使用Gson保持我將不得不作出嵌套在一個多層次"b"爲它工作,因爲它需要與對象的數組對象,並使用JSONObject.get("b")只會給我內部的數組。

UPDATE,更具體,我添加了一個JSON對象,我嘗試用

此JSON的工作是什麼,我開始,只是b的數組,如果我跑,工作正常它:

{ 
     "b": [ 
      { 
       "str": "first string" 
      } 
     ] 
} 

這JSON是一個比較複雜的情況下我確實有b的列表,這是完全一樣的GSON的需要,也是其心不是具體針對我的A類,另一個參數是什麼,我希望戈森忽略和行爲像第一個案件。

{ 
    "b": [ 
     { 
      "str": "first string" 
     } 
    ], 
    "c": 7 
} 
+0

你能發佈準確的Json字符串嗎?即使對於複雜的Json,GSON也可以適用。 –

+0

那麼你有什麼問題?不知道你說的Json哪部分複雜 –

回答

0

我們總是固定這種問題的方法是定義佔位符類,這是能夠獲取數據,所以:

class A { 
    List<C> b; 
} 

class C { 
    String str; 
} 

class ContainerA extends HashMap<String, A>{ 
} 

然後你做:

Gson gson = new Gson(); 
Map<String, A> javaMap = gson.fromJson(jsonString, ContainerA.class); 

這是一種解決方法,但適用於Android的Gson和Spring的GsonHttpMessageConverter