2013-03-13 94 views
7

我有JSON字符串的遵循snipets:如何將動態字段的Json字符串轉換爲Object?

{ 
    "networks": { 
    "tech11": { 
     "id": "1", 
     "name": "IDEN" 
    }, 
    "tech12": { 
     "id": "2", 
     "name": "EVDO_B" 
    } 
} 
} 

我用一些方法來把這個字符串轉換對象:

private static Gson mGson = new Gson(); 

    ... 

public static WebObjectResponse convertJsonToObject(String jsonString) { 

    WebObjectResponse webObjectResponse = null; 


    if(jsonString != null && jsonString.length() > 1){ 
     webObjectResponse = mGson.fromJson(jsonString, WebObjectResponse.class); 
    } 

    return webObjectResponse; 

} 

哪裏WebObjectResponse是應代表上述String類。

如果我獲得靜態字段,它並不複雜。 但在我的情況的值有不同的名稱:tech11tech12 ....

我可以使用@SerializedName但其在特定情況下像轉換「類」到「class_」的作品。 正如您所看到的networks對象定義爲列表tech對象但具有不同的修復後。

public class WebObjectResponse{ 
private DataInfoList networks = null; 
} 

這是靜態的實現中,我定義的2個值tech11tech12但接下來的反應可能是techXX

public class DataInfoList { 
private DataInfo tech11 = null; 
private DataInfo tech12 = null; 
} 


public class DataInfo { 
private String id = null; 
private String name = null; 
} 

什麼是將電流轉換JSON字符串到對象,其中的元素列表是好辦法對象也有不同的名字?

謝謝。

+2

結構請出示的'WebObjectResponse'類相關部件,結構。 – 2013-03-13 15:13:43

+0

增加了3個類 – 2013-03-13 15:20:15

+1

現在,它應該完美地映射。如果你有不定數量的'DataInfo'對象,那麼考慮使用一個map,將'techXX'作爲一個String鍵。 – 2013-03-13 15:21:04

回答

6

使用地圖!

我會做以下

public class WebObjectResponse { 
    private Map<String, DataInfo> networks; 
} 

public class DataInfo { 
    private String id = null; 
    private String name = null; 
} 

// later 
Gson gson = new Gson(); 
String json = "{\"networks\": {\"tech11\": { \"id\": \"1\",\"name\": \"IDEN\" }, \"tech12\": { \"id\": \"2\", \"name\": \"EVDO_B\" } }}"; 

WebObjectResponse response = gson.fromJson(json, WebObjectResponse .class); 

對於每一個對象在JSON networks,新的條目將被添加到您的WebObjectResponse類的Map領域。然後您通過techXX來引用它們或者遍歷鍵集。

假設這樣

{ 
    "networks": { 
    "tech11": { 
     "id": "1", 
     "name": "IDEN" 
    }, 
    "tech12": { 
     "id": "2", 
     "name": "EVDO_B" 
    }, 
    "tech13": { 
     "id": "3", 
     "name": "WOHOO" 
    }, ... 
    } 
} 
+0

+1和+ V,沒想過,謝謝 – 2013-03-13 15:39:18

2

我們需要您的班級結構以瞭解更多詳情。我認爲你需要在某處定義一些映射(我使用了xml),然後嘗試將json與其中一個映射進行匹配來創建對象。

Google gson很好。我在Jackson

此外,轉換對象應該是微不足道的。但是由於您可能有像tech11tech12這樣的可變字段,因此您可能希望將「網絡」值存儲爲字符串,然後在需要時從中提取字段。

希望我能幫上忙。

編輯:Sotirious釘它。

+1

加班結構,謝謝 – 2013-03-13 15:22:49