我有一个这种格式的字符串(它是一个分配给字符串var的Map列表)
[{code=1, data=Male} , {code=2, data=Female}]
..如何解析上面的字符串回到map的列表..而不使用任何String.split函数(因为它容易出错)
这是我尝试过的代码..但是有分离函数..
if(!string.equals("")){
String[] listArray = string.split(DELIMITER);
for (int i=0;i<listArray.length;i++) {
String val=listArray[i];
val = val.replaceAll("[\\{\\}]", "");
//Gets the value from DATA key
if(val.split(EQDELIMITER)[0].trim().equalsIgnoreCase("DATA")){
try{
map.put("DATA", val.split(EQDELIMITER)[1]);
}catch(IndexOutOfBoundsException e){
map.put("DATA", "");
}
}
//Gets the value from CODE key
if(val.split(EQDELIMITER)[0].trim().equalsIgnoreCase("CODE")){
try{
map.put("CODE", val.split(EQDELIMITER)[1]);
}catch(IndexOutOfBoundsException e){
map.put("CODE", "");
}
}
if (map != null && map.size() >= 2) {
//add map to codeList
codeList.add(map);
map = new HashMap<String,Object>();
}
}
}
答案 0 :(得分:0)
如果您足够灵活使用图书馆,请使用Google的GSON
Map map = gson.fromJson(jsonString, Map.class);
如果你想要一个Map列表,你也可以使用TypeToken
List<Map<E,V>> list= new Gson().fromJson(jsonString,
new TypeToken<List<Map<E, V>>() {}.getType());
用实际类型替换E,V。
答案 1 :(得分:0)
为什么你不能去对象Mapper ..?(org.codehaus.jackson.map.ObjectMapper
)
会是这样的......
ObjectMapper mapper= new ObjectMapper();
Map<Integer,String> map = mapper.readValue(yourString,org.codehaus.jackson.type.TypeReference.TypeReference<Map<Integer,String>>() {
});