java - 如何将String解析回Map

时间:2016-10-12 05:11:55

标签: java string list parsing

我有一个这种格式的字符串(它是一个分配给字符串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>();
                    }
                }
            }

2 个答案:

答案 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>>() {
});