Year Class Student
------------------------
2013 No1 zhangsan
2013 No1 lisi
2013 No2 wangwu
2012 No1 zhaoliu
2012 No1 tianqi
转换前JSON格式:[{"Year":"2013","Class":"No1","Student":"zhangsan"}]转换后按以下格式显示JSON字符串{"info":[{"Year":"2013","ClassList":[{"Class":"No1","StudentList":[{"Student":"zhangsan"}]}]}]}
第一层循环代码如下
第二层循环如何写?
Map map1 = new HashMap();
Map map2 = new HashMap();
Map map3 = new HashMap();
Map map4 = new HashMap();
Map map5 = new HashMap();
map1.put("year", 2013);
map1.put("class", "No1");
map1.put("student", "zhangsan");
map2.put("year", 2013);
map2.put("class", "No1");
map2.put("student", "lisi");
map3.put("year", 2013);
map3.put("class", "No2");
map3.put("student", "wangwu");
map4.put("year", 2012);
map4.put("class", "No1");
map4.put("student", "zhaoliu");
map5.put("year", 2012);
map5.put("class", "No1");
map5.put("student", "tianqi");
List<Map> list = new ArrayList<Map>();
list.add(map1);
list.add(map2);
list.add(map3);
list.add(map4);
list.add(map5);
Map result = new HashMap();
List<Map> dbMapList = list;
List<Map> resultMapList = new ArrayList<Map>();
String s = new String();
for (Map dbMap : dbMapList) {
Map existMap = null;
for (Map resultMap : resultMapList) {
int newYear = (Integer) resultMap.get("year");
int oldYear = (Integer) dbMap.get("year");
if (newYear == oldYear) {
existMap = resultMap;
break;
} else {
continue;
}
}
Map classMap = new HashMap();
classMap.put("class", dbMap.get("class"));
if (existMap != null) {
List l = (List) existMap.get("ClassList");
l.add(classMap);
} else {
Map mapTmp = new HashMap();
mapTmp.put("year", dbMap.get("year"));
List<Map> classMapList = new ArrayList<Map>();
classMapList.add(classMap);
mapTmp.put("ClassList", classMapList);
resultMapList.add(mapTmp);
}
}
result.put("info", resultMapList);
JSONObject json = JSONObject.fromObject(result);
System.out.println(json.toString());
------------------------
2013 No1 zhangsan
2013 No1 lisi
2013 No2 wangwu
2012 No1 zhaoliu
2012 No1 tianqi
转换前JSON格式:[{"Year":"2013","Class":"No1","Student":"zhangsan"}]转换后按以下格式显示JSON字符串{"info":[{"Year":"2013","ClassList":[{"Class":"No1","StudentList":[{"Student":"zhangsan"}]}]}]}
第一层循环代码如下
第二层循环如何写?
Map map1 = new HashMap();
Map map2 = new HashMap();
Map map3 = new HashMap();
Map map4 = new HashMap();
Map map5 = new HashMap();
map1.put("year", 2013);
map1.put("class", "No1");
map1.put("student", "zhangsan");
map2.put("year", 2013);
map2.put("class", "No1");
map2.put("student", "lisi");
map3.put("year", 2013);
map3.put("class", "No2");
map3.put("student", "wangwu");
map4.put("year", 2012);
map4.put("class", "No1");
map4.put("student", "zhaoliu");
map5.put("year", 2012);
map5.put("class", "No1");
map5.put("student", "tianqi");
List<Map> list = new ArrayList<Map>();
list.add(map1);
list.add(map2);
list.add(map3);
list.add(map4);
list.add(map5);
Map result = new HashMap();
List<Map> dbMapList = list;
List<Map> resultMapList = new ArrayList<Map>();
String s = new String();
for (Map dbMap : dbMapList) {
Map existMap = null;
for (Map resultMap : resultMapList) {
int newYear = (Integer) resultMap.get("year");
int oldYear = (Integer) dbMap.get("year");
if (newYear == oldYear) {
existMap = resultMap;
break;
} else {
continue;
}
}
Map classMap = new HashMap();
classMap.put("class", dbMap.get("class"));
if (existMap != null) {
List l = (List) existMap.get("ClassList");
l.add(classMap);
} else {
Map mapTmp = new HashMap();
mapTmp.put("year", dbMap.get("year"));
List<Map> classMapList = new ArrayList<Map>();
classMapList.add(classMap);
mapTmp.put("ClassList", classMapList);
resultMapList.add(mapTmp);
}
}
result.put("info", resultMapList);
JSONObject json = JSONObject.fromObject(result);
System.out.println(json.toString());
public static void main(String[] args) {
JSONObject returnJson = new JSONObject();
JSONArray yearJsonArray = new JSONArray();
JSONArray jsonArray = JSONArray.fromObject(getInitString());
List<String> yearList = getYearList(jsonArray);
for (String year : yearList) {
JSONObject yearJson = getYearJson(jsonArray, year);
yearJsonArray.add(yearJson);
}
returnJson.put("info", yearJsonArray);
System.out.println(returnJson.toString());
}
private static String getInitString() {
String rawString = "[" +
"{\"Year\":\"2013\",\"Class\":\"No1\",\"Student\":\"zhangsan\"}," +
"{\"Year\":\"2013\",\"Class\":\"No1\",\"Student\":\"lisi\"}," +
"{\"Year\":\"2013\",\"Class\":\"No2\",\"Student\":\"wangwu\"}," +
"{\"Year\":\"2012\",\"Class\":\"No1\",\"Student\":\"zhaoliu\"}," +
"{\"Year\":\"2012\",\"Class\":\"No1\",\"Student\":\"tianqi\"}" +
"]";
return rawString;
}
private static List<String> getYearList(JSONArray jsonArray) {
List<String> yearList = new ArrayList<String>();
for (Object object : jsonArray) {
JSONObject json = (JSONObject) object;
String year = json.getString("Year");
if (!yearList.contains(year))
yearList.add(year);
}
return yearList;
}
private static JSONObject getYearJson(JSONArray jsonArray, String year) {
JSONObject yearJson = new JSONObject();
JSONArray classListJsonArray = new JSONArray();
List<String> classList = getClassList(jsonArray, year);
for (String clazz : classList) {
JSONObject classJson = getClassJson(jsonArray, year, clazz);
classListJsonArray.add(classJson);
}
yearJson.put("Year", year);
yearJson.put("ClassList", classListJsonArray);
return yearJson;
}
private static List<String> getClassList(JSONArray jsonArray, String year) {
List<String> classList = new ArrayList<String>();
for (Object object : jsonArray) {
JSONObject json = (JSONObject) object;
if (year.equals(json.getString("Year"))) {
String clazz = json.getString("Class");
if (!classList.contains(clazz))
classList.add(clazz);
}
}
return classList;
}
private static JSONObject getClassJson(JSONArray jsonArray, String year, String clazz) {
JSONObject classJson = new JSONObject();
JSONArray studentListJsonArray = new JSONArray();
List<String> studentList = getStudentList(jsonArray, year, clazz);
for (String student : studentList) {
JSONObject studentJson = new JSONObject();
studentJson.put("Student", student);
studentListJsonArray.add(studentJson);
}
classJson.put("Class", clazz);
classJson.put("StudentList", studentListJsonArray);
return classJson;
}
private static List<String> getStudentList(JSONArray jsonArray, String year, String clazz) {
List<String> studentList = new ArrayList<String>();
for (Object object : jsonArray) {
JSONObject json = (JSONObject) object;
if (year.equals(json.getString("Year")) && clazz.equals(json.getString("Class"))) {
String student = json.getString("Student");
if (!studentList.contains(student))
studentList.add(student);
}
}
return studentList;
}
供参考^_^
然后给这个类提供一个objectToJson的方法(个人感觉和toString有点像),可以参考LS的写法,只是具体值换成对象的属性值。供参考^_^
然后给这个类提供一个objectToJson的方法(个人感觉和toString有点像),可以参考LS的写法,只是具体值换成对象的属性值。供参考^_^没关系
从数据库获取到的是一个List<Map>
可以通过Map m = new HashMap();
m.put("list", list);
JSONArray jsonArray = JSONArray.fromObject(m.get("list"));获取字符串
Map map2 = new HashMap();
Map map3 = new HashMap();
Map map4 = new HashMap();
Map map5 = new HashMap();
map1.put("Year", 2013);
map1.put("Class", "No1");
map1.put("Student", "zhangsan");
map2.put("Year", 2013);
map2.put("Class", "No1");
map2.put("Student", "lisi");
map3.put("Year", 2013);
map3.put("Class", "No2");
map3.put("Student", "wangwu");
map4.put("Year", 2012);
map4.put("Class", "No1");
map4.put("Student", "zhaoliu");
map5.put("Year", 2012);
map5.put("Class", "No1");
map5.put("Student", "tianqi");
List<Map> list = new ArrayList<Map>();
list.add(map1);
list.add(map2);
list.add(map3);
list.add(map4);
list.add(map5);
Map m = new HashMap();
m.put("list", list);
JSONArray jsonArray = JSONArray.fromObject(m.get("list"));
JSONObject returnJson = new JSONObject();
JSONArray yearJsonArray = new JSONArray();
List<String> yearList = getYearList(jsonArray);
for (String year : yearList) {
JSONObject yearJson = getYearJson(jsonArray, year);
yearJsonArray.add(yearJson);
}
returnJson.put("info", yearJsonArray);
System.out.println(returnJson.toString());