最近我负责的一个项目,后台是用ExtJs框架,在使用到编辑表格(EditorGrid)的时候需要修改数据,要做到人性化和简化数据更新,为了 做到这些,需要将改变过的数据以json数据类型返回服务器端,但是返回的json数据类型是多条信息的集合,并且每条数据都有修改数据类型不同的可能, 比如说id为1的这条数据我只修改了这段为name,而id为2的这条信息我修改了name和age这2个字段,则返回的json数据中,将是2个键名不 同的数据。但是在服务器段接受到的数据必须和数据持久打交道,每条数据都将更新到数据库,那么就只能将处理后的json数据变形为Map形式,再将每个 Map存放在List<T>集合里
在这我写了一个util类,用来把json数据类型转化成 List<Map<String,Object>>集合型
/**
* JSONTOMap,本方法是把JSON数据类型转化成List<Map<String, Object>>集合型
*
* @param json
* 需要装换的JSON数据类型
* @return
* List
*/
public static List<Map<String, Object>> JSONTOMap(String json) {
List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
List<String> list = new ArrayList<String>();
String JSON = json.substring(1, json.length() - 1);
JSON = JSON.replaceAll("},", "}^");
StringTokenizer strTokenizer = new StringTokenizer(JSON, "^");
while (strTokenizer.hasMoreTokens()) {
String token = strTokenizer.nextToken();
list.add(token);
}
int start = 0;
int end = 0;
int start2 = 0;
int end2 = 0;
for (int i = 0; i < list.size(); i++) {
String str = (String) list.get(i);
String key = "";
String value = "";
Map<String, Object> map = new HashMap<String, Object>();
for (int j = 0; j < str.length(); j++) {
String sub = str.substring(j, j + 1);
if (sub.equals("{")) {
start = j + 1;
}
if (sub.equals(",")) {
start = j + 1;
}
if (sub.equals(":")) {
end = j;
key = str.substring(start, end);
key = key.substring(1, key.length()-1);
}
if (sub.equals(":")) {
start2 = j + 1;
}
if (sub.equals(",") || sub.equals("}")) {
end2 = j;
value = str.substring(start2, end2);
if(value.substring(0, 1).equals("\"") && value.substring(value.length()-1,value.length()).equals("\"")){
value = value.substring(1, value.length()-1);
}
map.put(key, value);
}
}
listMap.add(map);
}
return listMap;
}
}