2011-02-11 25 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

相关问题