2013-04-17 52 views
0

你能告訴我怎麼用GSON提取此字符串中定義了兩個不同的對象: http://json.parser.online.fr/GSON對象deserialisation

我嘗試使用

gson.fromJson(json, SeedAttribs.class); 

gson.fromJson(json, SettingsAttribs.class); 

但都沒有工作。我很驚訝,爲什麼不呢。 我還需要一種方法來取代這個json字符串時,特定的對象如。 SeedAttribs更改。我需要一種方法來重寫它,而SettingsAttribs不會改變。

這怎麼辦?

謝謝你的回答!

+0

你是什麼SettingsAttribs類源? – user1697575

+0

它基本上只是模型類與少數字符串字段和其獲取/設置方法... – greengold

回答

0

確保您的原始JSon字符串包含正確的格式。最好的方法是用GSON序列化你的對象。這裏是代碼:

public static void main(String[] args) 
{ 
    Gson gson = new Gson(); 
    SettingsAttribs st = new SettingsAttribs(); 
    st.setField1("value1"); 
    st.setField2("value2"); 
    // report constructed object 
    System.out.println("st: " + st); 

    // serialize to json 
    String json = gson.toJson(st, SettingsAttribs.class); 
    System.out.println("json: " + json); 

    // deserialize form json 
    SettingsAttribs restoredSettings = gson.fromJson(json, SettingsAttribs.class); 
    System.out.println("restoredSettings: " + restoredSettings); 
} 

它編譯和運行。輸出它產生:

st: SettingsAttribs [field1=value1, field2=value2] 
json: {"field1":"value1","field2":"value2"} 
restoredSettings: SettingsAttribs [field1=value1, field2=value2] 

而且SettingsAttribs類:

public class SettingsAttribs 
    { 
    private String field1; 
    private String field2; 

    public String getField1() 
    { 
     return field1; 
    } 

    public void setField1(String field1) 
    { 
     this.field1 = field1; 
    } 

    public String getField2() 
    { 
     return field2; 
    } 

    public void setField2(String field2) 
    { 
     this.field2 = field2; 
    } 

    @Override 
    public String toString() 
    { 
     return "SettingsAttribs [field1=" + field1 + ", field2=" + field2 + "]"; 
    } 
    } 
+0

是的,這是谷歌網站所說的gson項目。 但是,請更仔細地參考我的帖子!我會需要一種方式來更多的序列化,例如。 2個對象(SettingsAttribs.class和SeedAttribs.class)和反序列化,然後在改變其中一個對象之後,將更改的對象序列化回json字符串,而不是拼湊另一個對象! 當我讀到gson時,它似乎應該像一個對象一樣工作,但是,我在某處可能犯了一個錯誤 – greengold

+0

當你序列化已更改的對象時,你確定不會覆蓋另一個對象實例的json字符串嗎?顯示你的代碼你最近怎麼做... – user1697575

+0

以及我沒有。如果你仔細閱讀,請你知道這就是我在這裏提出的問題。 如果我有 gson.fromJson(json,SettingsAttribs.class); 然後我可以從SettingsAttribs包含的json字符串中提取屬性。但是在改變這個對象之後,我需要一種方法來創建一個由這個新對象組成的json和舊的json字符串沒有被刪除的舊字段。 不能更清晰 – greengold