2011-02-11 20 views
1

在客戶端側,我已經建造了一個JSOnARRAY這樣的:如何在java中使用flexjson.deserializer將jsonarray反序列化爲列表<Map>?

{"filterEntries":[{"dataName":"mainContact","filterValue":"BILLGATES"}]}. 

在服務器側(JAVA),我可以使用retireve值:

jfilter = JSONValue.parse(jsonFilterStr); //jsonFilterStr={"filterEntries":[{"dataName":"mainContact","filterValue":"BILLGATES"}]}. 

JSONArray jFilterEntries = (JSONArray) jfilter.get("filterEntries"); 
for (int i=0;i<jFilterEntries.size();i++){ 
    JSONObject jFilterEntry = (JSONObject) jFilterEntries.get(i); 
    String dataName = (String) jFilterEntry.get("dataName"); 
    String filterValue = (String) jFilterEntry.get("filterValue"); 
} 

但現有的應用程序使用flex.json.deserializer和我無法使用flex.json.deserializer實現相同。我應該如何繼續? 我願做這樣的事情:

JSONDeserializer jsonDeserializer = new JSONDeserializer(); 
jsonDeserializer.use(null, List.class); 
List<Map<String,String>> lMap= (List<Map<String,String>>)jsonDeserializer.deserialize(params); 

回答

3

記住頂部對象封裝了數組。你也必須處理這個問題。您必須告訴它期望列表中的地圖。爲此,您必須使用路徑表達式「values」來指定列表中包含的類型。

Map<String,List<Map<String,String>>> result = new JSONDeserializer<Map<String,List<Map<String,String>>>>() 
    .use("values",List.class) 
    .use("values.values", Map.class) 
    .deserialize(json); 

List<Map<String,String>> filterEntries = result.get("filterEntries"); 

更新:添加新的關鍵字,並在合適的匹配左取得了泛型類型。

+0

上面的代碼似乎存在一些問題,我相信因爲它沒有運行或什麼。但是在JSONDeserializer之前你確實需要一個「新」。我也得到一個錯誤,它「無法從列表轉換爲地圖<字符串,列表>」 此外,我試圖這樣的事情,但一點點複雜:{「title」:[「a」,「 b」, 「C」]} '代碼' 地圖<字符串,列表>結果=新JSONDeserializer Chris 2012-08-16 03:38:20

相關問題